Codeigniter $ this→会话→. .向控制器添加构造函数时未加载(失败)


Codeigniter $this->session->... not loading (failing) when adding constructor to controller

我正在使用autolload .php自动加载'session库'。

我在我的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');
}

在我的另一个控制器,称为"类"我有以下代码…

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错误严重性:Notice Message: Undefined属性:Classes: $session文件名:controllers/Classes.php编号:12回溯:文件:C:'xampp'htdocs'php'toucan_app'App'controllers'Classes.php函数:_error_handler文件:C:'xampp'htdocs'php'toucan_app'index.php Line: 315require_once致命错误:在null上调用成员函数userdata()C:'xampp'htdocs'php'toucan_app'App'controllers'Classes.php12遇到PHP错误严重性:错误消息:调用成员函数userdata()为空文件名:controllers/Classes.phpBacktrace:

为什么构造函数会导致错误?最后,我想将'is logged in'检查添加到类构造函数中,这样我就不必将其添加到每个方法中,从而保护整个类。

当子类有自己的__construct方法时,父类__constructs不会被隐式调用。

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

请参阅此处查看与CodeIgniter的Controller构造相关的代码。

您可以在会话变量中设置数据:

$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';
        }
    }
}