无法访问钩子中的用户数据 - 代码iginitor

时间:2014-05-30 07:03:12

标签: php codeigniter-2

这是我的hooks.php

$hook['pre_controller'] = array(
                            'class'    => 'UpdateSession',
                            'function' => 'index',
                            'filename' => 'UpdateSession.php',
                            'filepath' => 'hooks',
                            'params'   => array()
                            );

这是我的UpdateSession.php,它放在hooks文件夹中。

<?php

class UpdateSession extends CI_Controller
{
public function __construct()
{
    $this->CI =& get_instance();
    $this->CI->load->library("session");
}

public function index()
{
    if($this->CI->session->userdata('user_id')) 
    {
        $query =  $this->CI->db->get_where('cp_sessions', array('user_id' => $this->CI->session->userdata('user_id')));
        $session_info = $query->row_array();

        if($session_info['session_id'] !=    $this->CI->session->userdata('user_id'))
        {
            $new_session_id = array('session_id' => $this->CI->session->userdata('user_id'));
            $this->db->update('cp_sessions', $new_session_id, array('user_id' => $this->CI->session->userdata('user_id')));
        }
    }
}
}

这给了我以下错误

Fatal error: Call to a member function library() on a non-object in
C:\xampp\htdocs\website\pokeradda\application\hooks\UpdateSession.php on line 8

我尝试删除扩展CI_Controller,但同样存在问题。

1 个答案:

答案 0 :(得分:0)

如果您使用预控制器挂钩意味着您在加载控制器之前调用您的类。这样你就无法在这个钩子中获取CI实例,因为CI尚未加载!

  

你无法在SOME钩子中获取CI实例:

     
      
  • CAN NOT:pre_system,pre_controller
  •   
  • CAN:post_controller_constructor,post_controller,display_override,cache_override,post_system
  •   

您可以使用My_controller并从中扩展您的控制器。在My_controller构造函数中添加功能。 (作为解决方案的建议)