2014-11-03 54 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