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】:我已经搞砸了一段时间。如果您在尝试加载视图后使用die
或exit
,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() 函数,视图不会加载的主要内容,如果未能解决你的问题,请参考以下文章