【问题标题】:Codeigniter , hook not loading Input class correctlyCodeigniter,钩子没有正确加载输入类
【发布时间】:2011-10-30 18:06:19
【问题描述】:

我在使用 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 ...原因在控制器、视图和模型输入库中正常工作:/

【问题讨论】:

    标签: php codeigniter hook


    【解决方案1】:

    正确,输入类未在pre_controller 挂钩处加载。您需要使用post_controller_constructor 挂钩。

    如果这对您来说还不够早,您将需要覆盖 CI_Controller 类本身。

    【讨论】:

    • 我不能在 post_controller 中使用 cookie 操作,因为为时已晚 :) 应该读取 pre_controller 来处理数据 :(
    • 它的 post_controller_constructor,需要明确的是:这是在控制器中的任何操作运行之前但在所有内容初始化之后。我想您可以直接访问 $_COOKIE 数组,但这通常是避免的好事情。
    【解决方案2】:

    你的怀疑是对的。您最好扩展 Controller 类并将该代码放入它的构造函数中。确保让所有控制器扩展您创建的类。

    更多详情见'Extending Core Classes' in 1.7's User Guide

    【讨论】:

    • 好的,但我不能在钩子中操作 cookie 是完全没有意义的,不是吗? ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2011-01-12
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多