我正在尝试在我的pre_controller挂钩中加载cookie帮助器,以便在我们的网站上使用“记住我”功能。我认为用$ ci =&创建CI对象的实例get_instance();允许我访问加载帮助程序,但事实并非如此。
思想?
$ci =& get_instance();
$ci->load->helper('cookie');
// does not load
答案 0 :(得分:15)
post_controller_constructor的问题是它在构造函数之后运行(有趣的是),并且如果你使用Controller构造函数来处理很多事情,这可能是个问题。
如果这对你来说不是问题(你的助手不会影响在你的构造函数中运行或加载的任何东西),那么如果它是一个问题你有两个解决方案。
创建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
。
答案 1 :(得分:12)
pre_controller
挂钩在超级对象完全构造之前执行,因此get_instance()
无法工作 - 它返回引用的静态对象尚未初始化。
请考虑使用post_controller_constructor
挂钩;你的控制器的构造函数将被执行,CI超级对象将可供使用。