Codeigniter $ this-> session-> ...在向控制器添加构造函数时未加载(失败)

时间:2016-08-11 11:07:05

标签: php codeigniter session

我使用autoload.php自动加载'会话库'。

我使用Users/Login方法中的以下代码在控制器中设置用户数据。

$teacher_data = [
    'teacher_id' => $user_id,
    'username' => $username,
    'logged_in' => true
];

$this->session->set_userdata($teacher_data);

现在我只想使用以下内容检查用户是否已在我的受限页面上登录...

if (!$this->session->userdata('login_in')) {
    redirect('home/login');
}

在我的另一个名为'Classes'的控制器中,我有以下代码......

class Classes extends CI_Controller
{
    public function create()
    {
        if (!$this->session->userdata('login_in')) {
            echo 'not logged in';
        }
    }
}

如果用户没有查看页面的权限,代码会将用户重定向回登录,很棒...但是当我添加构造函数时...即使是像这样的空白...

class Classes extends CI_Controller
{
    public function __construct()
    {

    }

    public function create()
    {
        if (!$this->session->userdata('login_in')) {
            echo 'not logged in';
        }
    }
}

我收到致命错误:

  

遇到PHP错误严重性:通知消息:未定义   property:Classes :: $ session文件名:controllers / Classes.php Line   数量:12 Backtrace:文件:   C:\ xampp \ htdocs \ php \ toucan_app \ App \ controllers \ Classes.php行:12   功能:_error_handler文件:   C:\ xampp \ htdocs \ php \ toucan_app \ index.php行:315功能:   require_once致命错误:在null上调用成员函数userdata()   在C:\ xampp \ htdocs \ php \ toucan_app \ App \ controllers \ Classes.php上线   12遇到PHP错误严重性:错误消息:调用a   成员函数userdata()on null文件名:controllers / Classes.php   行号:12 Backtrace:

为什么构造函数会导致错误?最后,我想将“登录”检查添加到类构造函数中,这样我就不必将它添加到每个单独的方法中,从而保护整个类。

2 个答案:

答案 0 :(得分:1)

如果子类具有__constructs方法,则不会隐式调用父__construct

您需要在子类的构造中调用parent::__construct()才能使其正常工作。

请参阅here以获取与CodeIgniter的Controller构造相关的代码。

答案 1 :(得分:1)

您可以在会话变量中更改设置数据中的代码:

$teacher_data = array(
    'teacher_id' => $user_id,
    'username' => $username,
    'logged_in' => true
);

$this->session->set_userdata($teacher_data);

您可以检查登录登录变量:

class Classes extends CI_Controller
{
    public function __construct()
    {
       parent::__construct();
    }

    public function create()
    {
        if (!$this->session->userdata('logged_in')) {
            echo 'not logged in';
        }
    }
}