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

我已经搞砸了一段时间。如果您正在使用dieexit尝试加载视图后,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()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();
}
于 2010-08-15T20:47:54.717 回答