3

Yii::app()->name は yii にキャッシュされていますか? 常用しても大丈夫ですか?レイアウトでカスタム ページ タイトルを使用することにし、コントローラーでこのようなものを使用します。

$this->pageTitle = Yii::app()->name . ":" . $action
4

2 に答える 2

9

キャッシュキャッシュではありませんが、使い放題でOKです。ガイドから:

アプリケーション オブジェクトは、エントリ スクリプトによってシングルトンとしてインスタンス化されます。アプリケーション シングルトンは、Yii::app() を介してどこからでもアクセスできます。

したがって、オブジェクトは既にそこにあり、nameプロパティを読み取るためにアクセスしているだけです。


更新:これをよりよく理解するために、アプリケーションのライフサイクルをたどってみましょう:

  • エントリ スクリプトindex.phpは、アプリケーションを作成しますYii::createWebApplication
  • Yii::createWebApplicationYii::createApplicationこれにより、新しい CWebApplication オブジェクトが作成されます。つまり、そのコンストラクター(親 CApplication で定義されている) が呼び出されます。このコンストラクターは、アプリケーション シングルトン オブジェクトを設定します

    Yii::setApplication($this);
    

    次に、ライフサイクルの最初の 4 つのステップを実行します (上記のアプリケーション ライフサイクルリンクから)。

    1. CApplication::preinit()でアプリケーションを事前に初期化します。すなわち:$this->preinit();
    2. クラスのオートローダーとエラー処理をセットアップします。すなわち$this->initSystemHandlers();
    3. コア アプリケーション コンポーネントを登録します。すなわち$this->registerCoreComponents();
    4. アプリケーション構成をロードします。すなわち$this->configure($config);。これにより、 が設定されnameます。
    5. 動作を添付します。すなわち 、静的アプリケーション コンポーネントをロードします。ie でアプリケーションを初期化する$this->attachBehaviors($this->behaviors);
      $this->preloadComponents();
      CApplication::init();$this->init();

    作成されたアプリケーションオブジェクトcreateApplicationはtoによって返されcreateWebApplicationます。

  • 次に、この同じオブジェクトを使用して、エントリ スクリプトでrun()メソッドを呼び出します。

    Yii::createWebApplication($config)->run();
    

    その後、runメソッドは残りのライフサイクルを実行します。

    1. (6)onBeginRequestイベントを発生させます。すなわち:$this->onBeginRequest(new CEvent($this));

    2. (7) ユーザー要求を処理します (を使用$this->processRequest();):

      • リクエストに関する情報を収集します。
      • コントローラーを作成します。
      • コントローラーを実行します。

        したがって、コントローラーが実行されているときに、コンストラクターで作成および設定されYii::app()同じオブジェクトcreateApplicationを呼び出すと、 が使用されるため、新しいオブジェクトは作成されず、プロパティは既存のオブジェクトからフェッチされます。

    3. (8)onEndRequestイベントを発生させます。すなわち:$this->onEndRequest(new CEvent($this));

于 2012-12-14T18:13:22.023 に答える