是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();创建的应用程序对象由createApplicationto 返回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));