代码点火器2 - 控制器/方法覆盖

时间:2011-08-16 15:36:27

标签: php override uri codeigniter-2

如果用户未登录,我想覆盖现有的Controller并调用auth / login,而不是保持浏览器URI。 (每个用户都必须登录才能使用该网站)

我试过一个预控制器钩子,但是它太早了。此时尚未实例化auth库。 由于目标控制器已被实例化,因此后控制器挂钩太晚了。

编辑库的构造函数似乎也没有意义,因为它已经被创建了......所以我有点卡住..

有什么想法吗? :)..

由于

3 个答案:

答案 0 :(得分:4)

我会覆盖默认控制器并在每个控制器中扩展。使用下一个代码创建一个新文件:./ app / core / MY_Controller.php:

class Secure_Controller extends CI_Controller {

    function __construct() {
        parent::__construct();

        /* replace this code with yours */
        if( !$this->session->userdata('logged_in') ) {
            redirect(base_url() . 'login', 'refresh'); // your login url
        }
    }
}

然后,在每个控制器中使用此代码,您应该可以由登录用户访问

class Main extends Secure_Controller {

答案 1 :(得分:0)

您是否考虑过将URI保存到flashdata,将访问者重定向到另一个控制器(登录页面),然后将引用者放入隐藏的表单字段?我正在使用Codeigniter对我的一个网站做同样的事情,它工作正常。唯一的区别是在此过程中URI不完整。

答案 2 :(得分:0)

也许这个问题的答案对你来说是一样的吗? CodeIgniter only allow access to certain controllers when logged in

(如果是这样,不要忘记用“function __construct()”和“parent :: Controller();”替换“parent className()”by“parent :: __ construct();”)