CodeIgniter:如果我使用 die() 函数,视图不会加载

Posted

技术标签:

【中文标题】CodeIgniter:如果我使用 die() 函数,视图不会加载【英文标题】:CodeIgniter: View doesn't load if I use die() function 【发布时间】:2011-03-30 04:19:06 【问题描述】:

我有以下代码。检查用户是否登录。 当变量 $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();

【问题讨论】:

从不想在 CodeIgniter 中使用die(),这是错误的做法。 【参考方案1】:

实际上,我找到了维护 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();

【讨论】:

只需在我正在编写的 AJAX 控制器中点击它,同时在构造函数中进行大量标头检查。 +1 用于挖掘输出类,所以我不必:)【参考方案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/');
   

谢谢

【讨论】:

【参考方案3】:

我已经搞砸了一段时间。如果您在尝试加载视图后使用dieexit,CI 会显示一个空白页。

解决方案是使用return,它会停止执行当前函数,并且在此之后不执行任何操作。

一个简单的例子:

public function validate()
 //validation code

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

 //This code won't run

【讨论】:

【参考方案4】:

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();

【讨论】:

当我放 ob_flush() 时抛出:遇到 PHP 错误 严重性:通知消息:ob_flush() [ref.outcontrol]:刷新缓冲区失败。没有要刷新的缓冲区。谢谢

以上是关于CodeIgniter:如果我使用 die() 函数,视图不会加载的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 上传图片 - 上传路径似乎无效

如何使用 codeigniter 动态创建列

Codeigniter 4 cookie问题无法设置

Codeigniter 查询更新所有行而不是 1

Codeigniter 调试上传不支持的类型文件

PHP die() 返回啥