我在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()
怎么可能呢?可能有可能在执行挂钩后加载输入库? :o ...导致控制器,视图和模型输入库无错误地工作:/
答案 0 :(得分:2)
正确,输入类未加载到pre_controller
挂钩。您需要使用post_controller_constructor
挂钩。
如果这还不够早,您将需要覆盖CI_Controller类本身。
答案 1 :(得分:1)
你的怀疑是对的。你最好扩展Controller类并将该代码放在它的构造函数中。确保让所有控制器扩展您创建的类。