[英]is Yii::app()->name cached on yii?
是Yii :: app() - >名称缓存在yii上? 经常使用它好吗? 我决定在我的布局上使用自定义页面标题,我在我的控制器上使用这样的东西。
$this->pageTitle = Yii::app()->name . ":" . $action
它没有缓存缓存,但可以根据需要使用它。 从指南 :
应用程序对象由入口脚本实例化为单例。 可以通过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();
初始化应用程序CApplication::init();
即$this->init();
创建的应用程序对象由createApplication
返回到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));
经常使用它好吗?
不,这不好,因为如果有一天您需要修改您的应用名称,那么在每个控制器中更改它都会有问题。 我想更好的方法是直接在layout
重新声明Yii::$app->name
。
在您的布局开始时,可能在views/layout/main.php
添加
Yii::$app->name = Yii::$app->name . ':' . Yii::$app->getView()->id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.