这是我的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
,但同样存在问题。
答案 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构造函数中添加功能。 (作为解决方案的建议)