Codeigniter 2.1 - __construct中的调用函数

时间:2012-12-27 14:05:49

标签: php codeigniter codeigniter-2

我有以下功能:

public function admin_login_check()
{
    if($this->session->userdata('is_logged_in') == FALSE)
        redirect('admin/admin_login');
}

和这一个(目前):

public function index()
{
    $this->admin_login_check();
    $data['title'] = 'Početna | TOP';
    $data['main_content'] = 'admin_home';
    $data= $this->data + $data;
    $this->load->view('admin/admin_template', $data);

}

public function admin_login()
{
        $data['title'] = 'Prijava | TOP';
        $data['main_content'] = 'admin_login';
        $data= $this->data + $data;
        $this->load->view('admin/admin_template', $data);
}

当我在$this->admin_login_check()函数内__construct时出现以下错误:

  

xxx / admin / admin_login的网页导致重定向过多。

2 个答案:

答案 0 :(得分:3)

您有太多重定向的原因是因为当您放置

$this->admin_login_check();

admin构造函数控制器中。这将始终在admin控制器内的每个方法/函数上运行。

由于您重定向到同一个admin控制器,

redirect('admin/admin_login');

如果您已注销,它会首先检查,因此会尝试一次又一次地重定向您。 一种解决方案是在单独的控制器上实际分离您的admin_login页面。如果有的话,可能是home控制器。

答案 1 :(得分:0)

您可以检查当前方法名称:

public function admin_login_check()
{
    $loged_in = $this->session->userdata('is_logged_in') ? TRUE : FALSE;
    if($this->router->method != 'admin_login' && $loged_in==FALSE)
        redirect('admin/admin_login');
} 

IF会检查您是否在admin_login页面以外的任何页面,并且您尚未登录。

我怎么认为这种重定向方法有点不对。 如果你让一个函数is_admin返回TRUE / FALSE并做这样的事情会更好......

public function __construct()
{
    parent::__construct();
    if($this->is_admin() == FALSE && $this->router->method != 'admin_login')
        redirect('admin/admin_login');
}

public function is_admin()
{
    return $this->session->userdata('is_logged_in') ? TRUE : FALSE;
}