Php Codeigniter,扩展类方法的问题

Php Codeigniter,扩展类方法的问题,php,codeigniter,hook,Php,Codeigniter,Hook,我已经有一段时间没有使用CI了,我有点怀疑 编辑: class MY_Controller extends CI_Controller { public function __construct() { parent::__construct(); if(!$this->session->userdata('usuario')) { $this->load->view('login'); }

我已经有一段时间没有使用CI了,我有点怀疑

编辑:

class MY_Controller extends CI_Controller {

    public function __construct() {
        parent::__construct();
        if(!$this->session->userdata('usuario')) {
            $this->load->view('login');
        }
    }

}

class Home extends MY_Controller {

    public function __construct() {

        parent::__construct();
        Template::set('title', 'Login');
        Template::set('view', 'home');

    }

    public function index() {

        $this->load->view('template');

    }
}

发生的情况是,用户会话无效,它将加载登录视图,但正如在my Home controller构造函数中一样,它调用视图Home,将两个视图加载到同一页面上。

不要将其放入钩子中,将其放入
\u construct()
方法中的
my_controller

例如:

// file application/core/MY_Controller.php
class MY_Controller extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        // your code here
    }

}
只需确保在要运行此代码的控制器中扩展
MY_Controller
,而不是
CI_Controller
。如果你必须改变所有这些,那就这样吧

更新:你也可以试试

post\u controller\u constructor

在控制器实例化之后,但在任何方法调用发生之前立即调用


但我还是更喜欢MY_Controller方法,因为它更灵活。

问题是User_Controller扩展了MY_Controller,因此它将处于无限循环中,然后将其放入User_Controller的构造函数中。编辑:这将如何导致无限循环?它应该可以正常工作。只是要明确一点,除了实际登录页面,您希望每个请求都强制登录,还是只希望某些控制器登录?是的,检查每个控制器请求的会话,对吗?这取决于您希望发生什么。顺便说一句,当您加载登录视图时,您需要退出,或者最好重定向到一个登录控制器,该控制器不扩展您执行会话检查的控制器。