是Yii :: app() - >名字緩存在yii上嗎?定期使用它很好嗎?我決定在我的佈局上使用自定義頁面標題,並在控制器上使用它。是yi上緩存的Yii :: app() - >名字?
$this->pageTitle = Yii::app()->name . ":" . $action
是Yii :: app() - >名字緩存在yii上嗎?定期使用它很好嗎?我決定在我的佈局上使用自定義頁面標題,並在控制器上使用它。是yi上緩存的Yii :: app() - >名字?
$this->pageTitle = Yii::app()->name . ":" . $action
它不緩存緩存,但它是確定使用它,只要你想盡可能多。從the guide:
應用程序對象通過條目腳本實例化爲單例。應用程序單例可以通過Yii :: app()在任何地方訪問。
所以對象已經存在,而你只是訪問它讀取name
屬性。
更新:爲了更好的理解,讓我們追溯the application lifecycle:
Yii::createWebApplication
。Yii::createWebApplication
電話Yii::createApplication
,然後創建一個新的CWebApplication類的對象,這意味着其構造(defined in parent CApplication)被調用。 此構造設置應用單對象:
Yii::setApplication($this);
然後它執行的第一個4個步驟的生命週期,它是(從應用程序的生命週期link above):
$this->preinit();
$this->initSystemHandlers();
$this->registerCoreComponents();
$this->configure($config);
。這設置了name
。$this->attachBehaviors($this->behaviors);
$this->preloadComponents();
CApplication::init();
即$this->init();
應用對象時創建由createApplication
返回到createWebApplication
初始化應用程序。
然後,該同一對象用於調用在入口腳本的run()
method:
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));
它被作爲你的一部分讀入配置,所以它不會添加任何加載時間:-) – acorncom
wpleet看到我的更新,我試圖解釋一些事情,現在應該很清楚,在獲取應用程序時沒有太多的額外工作名稱,如果你有疑問做評論。同樣,@acorncom提到,當讀入配置時,名稱被設置。 –
它好經常使用呢?
不,它不好,因爲如果有一天您需要修改應用程序名稱,那麼在每個控制器中更改它都會有問題。我想更好的方法是直接在layout
中重新聲明Yii::$app->name
。
在佈局的begiging,大概在views/layout/main.php
添加
Yii::$app->name = Yii::$app->name . ':' . Yii::$app->getView()->id;
它是如何讓上面的區別嗎? – itachi
@itachi - 他們問,如果它被加載到每個頁面上,可能會有性能損失(例如,如果Yii :: app的新實例每次都被實例化或者類似的東西) – ernie