我正在开发一个组件,它将从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,但这不仅仅允许静态方法吗? 我可以破解它并在一个单独的方法中设置一个应用程序组件,但这并不好。我希望这可以跨站点移植,并在我的配置中设置如果可能。
答案 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。