質問

これは機能するはずですので、なぜ機能しないのか、本当に困惑しています。

各管理ページの上部にある$ sessionクラスメソッドを使用して、ユーザーがログインしているかどうかを確認しています。ただし、ユーザーがログインしているかどうか、およびユーザーが持っている役割レベルに応じて、ヘッダーファイルを動的に調整します。

だから $ session-> is_logged_in()をチェックしてから、 $ logged = true という変数を定義しました。後で使用します。次に、 $ user-> find_by_id($ session-> id)メソッドを使用して新しいUserオブジェクトを作成し、 $ user-> role_level を新しい簡単に使用できるように $ role_level と呼ばれる変数。

これはすべてページの上部近くで発生しています。ページのさらに下のフォーム処理などには、 include(" ../_ layouts / header.php")コマンドがあります。次に、header.phpファイルで、 if(!$ logged){...} else {...} のような小さなチェックを使用します。ただし...

次のエラーが表示されます:

Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 119
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 131
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 138

これはどのようにできますか? header.phpをインクルードする前に、ファイルで変数を定義しています!それはうまくいきませんか?

FYI、header.phpファイルで $ logged を使用しようとするまで、すべてが正常に機能していました。

役に立ちましたか?

解決

変数はインクルードされたファイルに伝播するため、インクルードを呼び出すときに変数が設定されていない必要があります。そうであれば、チェックしてみて、その時点で変数が設定されない理由を見つけてください。

たとえば、「if」内で$ loggedを定義した場合、ブロックまたは関数の内部にある場合は、外部に伝播しません。最も外側のスコープ(include文を呼び出すのと同じレベル)で定義する必要があります。また、ユーザーがログインしている場合だけでなく、ユーザーがログインしていない場合にも定義する必要があります。変数がfalseに初期化されていない場合、check if(!$ logged)は警告を発行します。 $ logged = false;作業の始めに。

他のヒント

次のような非常にシンプルなものを試してください

// file1.php
$var = "foobar";

// file2.php
include("file1.php"); // or require("file1.php");
die($var);

動作しますか?コード外の問題かもしれません。

意見だけで...グローバルスペースで実行するコードを含める代わりに、定義されている別のグローバル変数に応じて、ファイルをどこにでも含め、header.php内のコードを適切な関数に編成します。次に、header.phpからの出力が必要な場所で、$ loggedを引数として適切な関数を呼び出します。これにより、コードがよりまとまりやすくなり、テストが容易になります(単体テストなど)。

if(!logged) if(empty($ logged))の代わりに。変数が設定されていない場合、通知は生成されません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top