是yii :: app() - >名称缓存在yii上?

时间:2012-12-14 17:45:12

标签: php yii

是yii :: app() - >名称缓存在yii上?经常使用它好吗?我决定在我的布局上使用自定义页面标题,我在控制器上使用这样的东西。

$this->pageTitle = Yii::app()->name . ":" . $action

2 个答案:

答案 0 :(得分:9)

它不是缓存缓存,但可以根据需要使用它。来自the guide

  

应用程序对象由入口脚本实例化为单例。可以通过Yii :: app()在任何地方访问应用程序单例。

所以对象已经存在,你只是访问它来阅读name属性。


更新:为了更好地理解这一点,让我们追踪the application lifecycle

  • 条目脚本 index.php 创建应用程序with Yii::createWebApplication
  • Yii::createWebApplication调用Yii::createApplication,然后创建一个新的CWebApplication对象,意味着调用构造函数defined in parent CApplication)。 此构造函数设置应用程序单例对象

    Yii::setApplication($this);
    

    然后执行生命周期的前4个步骤(从应用程序生命周期link above开始):

    1. 使用CApplication::preinit()预初始化应用程序;即:$this->preinit();
    2. 设置类自动加载器和错误处理;即$this->initSystemHandlers();
    3. 注册核心应用程序组件;即$this->registerCoreComponents();
    4. 加载应用程序配置;即$this->configure($config);。这会设置name
    5. 附加行为;即$this->attachBehaviors($this->behaviors);
      加载静态应用组件;即$this->preloadComponents();
      使用CApplication::init();$this->init();
    6. 初始化应用程序

      创建的应用对象createApplication返回createWebApplication

    7. 然后使用相同的对象来调用条目脚本中的run() method

      Yii::createWebApplication($config)->run();
      

      然后run方法执行生命周期的剩余部分:

      1. (6)举起onBeginRequest事件;即:$this->onBeginRequest(new CEvent($this));

      2. (7)处理用户请求(使用$this->processRequest();):

        • 收集有关请求的信息;
        • 创建一个控制器;
        • 运行控制器;

          因此,当您的控制器正在运行时,如果您调用Yii::app()createApplication中创建并在构造函数中设置的相同对象,则不会使用创建了对象,并且只从已存在的对象中获取属性。

      3. (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;