codeigniter:die()関数を使用している場合、ビューはロードされません

StackOverflow https://stackoverflow.com/questions/3489086

  •  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();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top