我在CI 1.7.3版本中遇到了一个简单的钩子。
我在config hook.php文件中设置了一个[pre_controller]钩子,钩子代码如下:
class Cookie {
function remember_me(){
$CI =& get_instance();
if($CI->input->cookie('remember_me_id',true)){
$CI->load->model('user');
$user = $CI->user->populateById($id = $CI->input->cookie('remember_me_id',true));
if($user){
if($CI->input->cookie('remember_me_token',true) == md5($user->email.$user->password)){
$CI->bootstrap->setUserSession($user);
}
}
}
}
}
//end class
钩子被加载并执行,但它没有加载输入库,导致它返回错误:在非对象
上调用成员函数cookie()这怎么可能?是否有可能在钩子执行后加载输入库?:阿…原因在控制器,视图和模型输入库工作没有错误:/
正确,输入类没有在pre_controller
钩子上加载。您需要使用post_controller_constructor
钩子。
如果这对你来说还不够早,你需要重写CI_Controller类本身
你的怀疑是对的。最好是扩展Controller类并将代码放入它的构造函数中。确保让所有的控制器都继承你创建的类。
要了解更多细节,请参阅1.7版用户指南中的"扩展核心类"