Yii init singleton ApplicationComponent onBeginRequest

时间:2014-11-03 17:30:56

标签: php yii

我正在开发一个组件,它将从URL中获取GET变量,将其存储在可访问的变量中并将其放在cookie中。如果未设置GET变量,则会将cookie值加载到可访问变量中:

MyComponent extends ApplicationComponent {

  protected $_var = null;

  public init(){
    // if isset($_GET['var']), set value to $_var and cookie;
    // elseif cookie set value to $_var;
    // else nothing; 
  }

  public getVar(){
    return $_var;
  }
}

我总是想要一个组件实例,我想在每个前端请求上运行init(即使它没有明确引用)。

我如何勾选它?我知道onBeginRequest,但这不仅仅允许静态方法吗? 我可以破解它并在一个单独的方法中设置一个应用程序组件,但这并不好。我希望这可以跨站点移植,并在我的配置中设置如果可能。

1 个答案:

答案 0 :(得分:1)

您只需将其添加到配置的preload部分即可:

保护/配置/ main.php

return array(
    // some parameters
    'preload' => array( 'myComponent' ),

    'components' => array(
        'myComponent' => array(
            'class' => 'path.to.your.component.MyComponent'
        ),
    ),
);

这将自动在每个前端请求上实例化组件。请参阅Yii权威指南的corresponding section