无法从CI挂钩检索数据数组

时间:2014-02-14 22:27:22

标签: php codeigniter

当用户访问我网站上的任何页面时,我都会运行以下钩子。我试图弄清楚如果找到当前用户,如何使用附加到数据数组的当前用户对象访问$ data数组的页面。当我在登录后访问我的cms中的页面时,当我对变量运行vardump时,表示数据数组为NULL。

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');
class Dashboard extends CI_Controller {
    public function __construct() {
        parent::__construct();
        dump_exit($this->data);
    }
}


<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');
class Sys_prescript extends CI_Controller {
    public $data = array();    
    function initial_run()
    { 
        $public_access = array('login', 'registration');
        $current_class = $this -> router -> fetch_class();
        $user_id = $this -> session -> userdata('user_id');
        if ($user_id == FALSE)
        {
            if (!in_array($current_class, $public_access))
            {
                redirect('login', 'refresh');
            }
        }
        else
        {
            if ((!is_numeric($user_id)) || (strlen($user_id) < 5)) {
                $this->session->unset_userdata('user_id'); 
                $this->session->sess_destroy();   
                redirect('login', 'refresh');
            }
            else {
                $this->load->model('user_model', 'user');    
                $current_user = $this -> user -> get($user_id);
                if (!is_object($current_user)) {
                    $this -> session -> unset_userdata('user_id');
                    $this -> session -> sess_destroy();
                    redirect('login', 'refresh');
                }
                else {
                    $this->data['current_user'] = $current_user;
                }  

                if (in_array($current_class, $public_access))
                {
                    redirect('dashboard', 'refresh');
                }
            }
        }
    }
} 

1 个答案:

答案 0 :(得分:0)

Hook应该只是一个类,你不需要再次扩展CI_Controller。认为您再次扩展CI意味着您正在创建新的CI对象,因此他们彼此不了解。如果要使用创建CI实例所需的任何CI变量,库,模型,您应该需要在类中创建一个类

$CI =& get_instance();

然后使用$CI->data(); $CI是CI_Controller

你跑的是什么样的钩子?如果您在控制器功能中设置数据,则应使用post_controller