2014-11-03 20 views
0

我正在开发一个组件,它将从URL中获取一个GET变量,并将其存储在一个可访问的变量中,并将其放置在一个cookie中。如果GET变量没有设置,将cookie值加载到访问的变量:Yii init单例ApplicationComponent onBeginRequest

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

您只需将它添加到你的配置的preload部分:

保护/配置/ main.php

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

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

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

+0

完美!谢谢,我认为会有一个标准的方式。我承认,我确实发现Yii文档有时很难导航。 – Arth 2014-11-04 09:15:06

+0

不客气!是的我同意。尽管他们有很好的记录类参考。 – 2014-11-04 13:01:40