是Yii :: app() - >名称缓存在yii上?经常使用它好吗?我决定在我的布局上使用自定义页面标题,我在我的控制器上使用这样的东西.
$this->pageTitle = Yii::app()->name . ":" . $action
Run Code Online (Sandbox Code Playgroud)
它没有缓存缓存,但可以根据需要使用它.从指南:
应用程序对象由入口脚本实例化为单例.可以通过Yii :: app()在任何地方访问应用程序单例.
所以对象已经存在,你只是访问它来阅读name
属性.
更新:为了更好地理解这一点,让我们跟踪应用程序生命周期:
Yii::createWebApplication
.Yii::createWebApplication
调用Yii::createApplication
,然后创建一个新的CWebApplication对象,这意味着它的构造函数(在父CApplication中定义)被调用.此构造函数设置应用程序单例对象:
Yii::setApplication($this);
Run Code Online (Sandbox Code Playgroud)
然后它执行生命周期的前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 Code Online (Sandbox Code Playgroud)
run
然后,该方法执行生命周期的其余部分:
(6)onBeginRequest
举办活动; 即:$this->onBeginRequest(new CEvent($this));
(7)处理用户请求(with $this->processRequest();
):
运行控制器;
因此,当您的控制器正在运行时,如果您调用在构造函数中创建并在其中设置Yii::app()
的相同对象,则createApplication
不会创建新对象,并且仅从已存在的对象中获取该属性.
(8)onEndRequest
举办活动; 即:$this->onEndRequest(new CEvent($this));