Yii::app()->name は yii にキャッシュされていますか? 常用しても大丈夫ですか?レイアウトでカスタム ページ タイトルを使用することにし、コントローラーでこのようなものを使用します。
$this->pageTitle = Yii::app()->name . ":" . $action
キャッシュキャッシュではありませんが、使い放題でOKです。ガイドから:
アプリケーション オブジェクトは、エントリ スクリプトによってシングルトンとしてインスタンス化されます。アプリケーション シングルトンは、Yii::app() を介してどこからでもアクセスできます。
したがって、オブジェクトは既にそこにあり、name
プロパティを読み取るためにアクセスしているだけです。
更新:これをよりよく理解するために、アプリケーションのライフサイクルをたどってみましょう:
Yii::createWebApplication
。Yii::createWebApplication
Yii::createApplication
これにより、新しい CWebApplication オブジェクトが作成されます。つまり、そのコンストラクター(親 CApplication で定義されている) が呼び出されます。このコンストラクターは、アプリケーション シングルトン オブジェクトを設定します。
Yii::setApplication($this);
次に、ライフサイクルの最初の 4 つのステップを実行します (上記のアプリケーション ライフサイクルリンクから)。
$this->preinit();
$this->initSystemHandlers();
$this->registerCoreComponents();
$this->configure($config);
。これにより、 が設定されname
ます。$this->attachBehaviors($this->behaviors);
$this->preloadComponents();
CApplication::init();
$this->init();
作成されたアプリケーションオブジェクトcreateApplication
はtoによって返されcreateWebApplication
ます。
次に、この同じオブジェクトを使用して、エントリ スクリプトでrun()
メソッドを呼び出します。
Yii::createWebApplication($config)->run();
その後、run
メソッドは残りのライフサイクルを実行します。
(6)onBeginRequest
イベントを発生させます。すなわち:$this->onBeginRequest(new CEvent($this));
(7) ユーザー要求を処理します (を使用$this->processRequest();
):
コントローラーを実行します。
したがって、コントローラーが実行されているときに、コンストラクターで作成および設定されYii::app()
た同じオブジェクトcreateApplication
を呼び出すと、 が使用されるため、新しいオブジェクトは作成されず、プロパティは既存のオブジェクトからフェッチされます。
(8)onEndRequest
イベントを発生させます。すなわち:$this->onEndRequest(new CEvent($this));