Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii init单例应用程序组件onBeginRequest_Php_Yii - Fatal编程技术网

Php Yii init单例应用程序组件onBeginRequest

Php Yii init单例应用程序组件onBeginRequest,php,yii,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

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

您可以将它添加到配置的
预加载部分:

protected/config/main.php


这将在每个前端请求中自动实例化组件。请参阅Yii最终指南的附录。

Perfect!谢谢,我以为会有一个标准的方法。我承认,我确实发现Yii文档有时很难导航。不客气!是的,我同意。不过他们有很好的类参考文档。
return array(
    // some parameters
    'preload' => array( 'myComponent' ),

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