4

私は次のコードを持っています。ユーザーがログインしているかどうかを確認します。変数$is_logged_inが設定されていないか、Falseの場合、メッセージビューをロードします。残念ながら、同時にシステムは制限されたコンテンツビューをロードします。そこで、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();
}
4

4 に答える 4

20

実際、私は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();
于 2011-11-15T19:12:24.067 に答える
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/');
   }

ありがとう

于 2010-08-15T21:34:51.060 に答える
1

私はしばらくこれをいじっています。ビューを使用している場合、dieまたはexitロードしようとした後に、CIは空白のページを表示します。

解決策は、を使用することreturnです。これは、現在の関数の実行を停止し、それ以降は何も実行しません。

簡単な例:

public function validate(){
 //validation code

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

 //This code won't run
}
于 2013-12-21T02:13:35.820 に答える
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();
}
于 2010-08-15T20:47:54.717 に答える