CodeIgniter:Hooks(pre_controller)加载助手

时间:2010-02-04 00:28:53

标签: php codeigniter

我正在尝试在我的pre_controller挂钩中加载cookie帮助器,以便在我们的网站上使用“记住我”功能。我认为用$ ci =&创建CI对象的实例get_instance();允许我访问加载帮助程序,但事实并非如此。

思想?

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

2 个答案:

答案 0 :(得分:15)

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');
        } 
    }
    
  3. 请注意,如果您使用的是CodeIgniter 3.0或更高版本,则_call_hook函数会重命名为call_hook

答案 1 :(得分:12)

pre_controller挂钩在超级对象完全构造之前执行,因此get_instance()无法工作 - 它返回引用的静态对象尚未初始化。

请考虑使用post_controller_constructor挂钩;你的控制器的构造函数将被执行,CI超级对象将可供使用。