2010-02-04 56 views
10

我想加載Cookie助手在我的pre_controller掛鉤爲我們的網站上的'記住我'功能。我認爲用$ ci = & get_instance()創建一個CI對象的實例。將允許我訪問加載助手,但事實並非如此。CodeIgniter:掛鉤(預控制器)加載助手

想法?

$ci =& get_instance(); 
$ci->load->helper('cookie'); 
// does not load 

回答

12

pre_controller掛鉤執行之前的超級對象已經完全構造,所以get_instance()不能工作 - 靜態對象返回到尚未初始化的參考。

考慮使用post_controller_constructor鉤子代替;你的控制器的構造函數將執行,並且CI超級對象將可用。

14

post_controller_constructor的問題是它在構造函數之後運行(足夠有趣),並且如果使用Controller構造函數處理很多事情,這可能是一個問題。

如果對你來說不是問題(你的幫手不會影響在你的構造函數中運行或加載的任何東西),那麼如果這是一個問題,你有兩個解決方案。

  1. 取而代之的是鉤把你的代碼MY_Controller
  2. 創建MY_Controller並添加自定義掛鉤點。

    class MY_Controller extends Controller 
    { 
    
        function MY_Controller() 
        { 
         parent::Controller(); 
         $GLOBALS['EXT']->_call_hook('pre_controller_constructor'); 
        } 
    } 
    

請注意,如果你使用的CodeIgniter 3.0或更高版本,功能_call_hook更名爲call_hook