2010-08-15 93 views
4

我有以下代碼。檢查用戶是否登錄。 當變量$ is_logged_in未設置或爲False時,我加載消息視圖。 不幸的是,與此同時系統加載受限制的內容視圖。 所以我用die()函數,現在只顯示一個空白頁。CodeIgniter:如果我使用die()函數,視圖不會加載

我該怎麼做才能在用戶未登錄時加載消息視圖? 謝謝。

if(!isset($is_logged_in) OR $is_logged_in == FALSE) 
{ 
    $data['main_content'] = 'not_logged_in'; 

    $data['data'] = ''; 

    $this->load->view('includes/template',$data); 

    die(); 
} 
+0

你_永遠_想'死()'CI中,這是一個錯誤的做法。 – 2010-08-15 21:37:42

回答

3

無論如何。我用了一個重定向到登錄頁面,並且flashdata可變

if(!isset($is_logged_in) OR $is_logged_in == FALSE) 
    { 
     $this->session->set_flashdata('error_msg','You must be logged in to access restricted area'); 
     redirect('login/'); 
    } 

感謝

0

CI可能使用輸出緩衝(請參見http://www.php.net/manual/en/ref.outcontrol.php)。如果你想加載一個視圖並殺死腳本,你需要刷新緩衝區。這通常會在腳本的最後完成,但是die()會阻止它到達那裏。

if(!isset($is_logged_in) OR $is_logged_in == FALSE) 
{ 
    $data['main_content'] = 'not_logged_in'; 
    $data['data'] = ''; 
    $this->load->view('includes/template',$data); 

    ob_flush(); 
    die(); 
} 
+0

當我把使用ob_flush()拋出: 甲PHP錯誤遇到 嚴重性:注意 消息:使用ob_flush()[ref.outcontrol]:未能刷新緩衝器。沒有緩衝區來沖洗。 謝謝 – 2010-08-15 21:14:44

19

其實,我找到了答案,以十個分量的網址,而不是重定向:

$data['main_content'] = 'unauthorized_access'; 
$this->load->view('includes/template', $data); 

// Force the CI engine to render the content generated until now  
$this->CI =& get_instance(); 
$this->CI->output->_display(); 

die(); 
+0

只需在AJAX控制器中點擊此按鈕,我在構造函數中進行大量標題檢查時正在編寫它。 +1挖掘輸出類,所以我不必:) – 2012-08-04 16:23:42

1

這一段時間我一直在搞這個。如果您在嘗試加載視圖後使用dieexit,則CI顯示空白頁面。

解決方法是使用return,它會停止當前函數的執行,並且不會在下面執行任何操作。

一個簡單的例子:

public function validate(){ 
//validation code 

if(!$valid){ 
    $this->load->view('error'); 
    return; 
} 

//This code won't run 
}