2012-12-27 61 views
0
我有以下功能

調用函數笨2.1 __construct

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功能我得到以下錯誤:

The web page at xxx/admin/admin_login has resulted in too many redirects.

+0

你離開了這個錯誤嗎? – Neal

+0

你忘了粘貼錯誤 – m4t1t0

+0

對不起。增加了錯誤。 – Sasha

回答

3

你有太多重定向的原因是因爲當你把

$this->admin_login_check(); 

在您的admin的構造控制器中。這將始終在您的admin控制器中的每個方法/功能上運行。

既然你重定向到同admin控制器,

redirect('admin/admin_login'); 

它首先會檢查你登錄了,所以它會嘗試一次又一次地重定向你。 一個解決方案是將您的admin_login頁面實際分離到單獨的控制器上。如果你有的話,可能是home控制器。

+0

謝謝你的建議:)。問題解決了:) – Sasha

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