CodeIgniter:Hooks(pre_controller)加载助手

Tho*_*mas 10 php codeigniter

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

思考?

 $ci =& get_instance();
 $ci->load->helper('cookie');
 // does not load
Run Code Online (Sandbox Code Playgroud)

Phi*_*eon 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');
        } 
    }
    
    Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用的是CodeIgniter 3.0或更高版本,则该功能_call_hook已重命名为call_hook.


mea*_*gar 12

pre_controller挂钩执行之前的超级对象已经完全构造,因此get_instance()无法正常工作-静态对象返回到尚未初始化的参考.

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