是yii :: app() - >名称缓存在yii上?经常使用它好吗?我决定在我的布局上使用自定义页面标题,我在控制器上使用这样的东西。
$this->pageTitle = Yii::app()->name . ":" . $action
答案 0 :(得分:9)
它不是缓存缓存,但可以根据需要使用它。来自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));
答案 1 :(得分:0)
定期使用它会很好吗?
不,这不好,因为如果有一天您需要修改您的应用名称,那么在每个控制器中更改它都会有问题。我想更好的方法是直接在Yii::$app->name
重新声明layout
。
在您的布局开始时,可能在views/layout/main.php
添加
Yii::$app->name = Yii::$app->name . ':' . Yii::$app->getView()->id;