Php Codeigniter,扩展类方法的问题
我已经有一段时间没有使用CI了,我有点怀疑 编辑: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'); }
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的构造函数中。编辑:这将如何导致无限循环?它应该可以正常工作。只是要明确一点,除了实际登录页面,您希望每个请求都强制登录,还是只希望某些控制器登录?是的,检查每个控制器请求的会话,对吗?这取决于您希望发生什么。顺便说一句,当您加载登录视图时,您需要退出,或者最好重定向到一个登录控制器,该控制器不扩展您执行会话检查的控制器。