codeigniter:die()関数を使用している場合、ビューはロードされません
-
28-09-2019 - |
質問
次のコードがあります。ユーザーがログインしているかどうかを確認します。変数$ is_logged_inが設定されていないか、偽の場合、メッセージビューをロードします。残念ながら、同時に、システムは制限されたコンテンツビューをロードします。そこで、私は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();
}
解決 2
ともかく。ログインページへのリダイレクトと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/');
}
ありがとう
他のヒント
実際、私はMantain the URLへの答えを見つけましたが、リダイレクトはありません。
$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();
私はしばらくこれをいじりました。使用している場合 die
また exit
ビューを読み込もうとした後、CIは空白のページを表示します。
解決策は使用することです return
, 、現在の関数の実行を停止し、その後何も実行しません。
簡単な例:
public function validate(){
//validation code
if(!$valid){
$this->load->view('error');
return;
}
//This code won't run
}
CIはおそらく出力バッファリングを使用しています(参照してください http://www.php.net/manual/en/ref.outcontrol.php)。ビューをロードしてスクリプトを殺したい場合は、バッファをフラッシュする必要があります。これは通常、スクリプトの最後で行われますが、die()ingはそこに到達するのを止めます。
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();
}
所属していません StackOverflow