调用$this后停止执行->;负载->;view()


Stop execution after call $this->load->view()

在Codeigniter中,我们如何在加载视图后停止执行?

我试过这个

function index() {
    $this->load->view('myView');
    die();
    //do not execute next code
}

但它导致了空白屏幕。

https://www.codeigniter.com/user_guide/general/views.html

第三个可选参数允许您更改函数的行为,使其以字符串形式返回数据,而不是将数据发送到浏览器。如果您想以某种方式处理数据,这可能很有用。

echo $this->load->view('myView', '', TRUE);
    die();

我知道我迟到了,但我在搜索加载视图是否停止执行时遇到了这个问题,但显然没有。

它可能对某人仍然有用,所以…要在加载视图后停止执行,您可以返回:

$this->load->view('myView');
return;

这不会停止PHP(与die()exit()不同),CI将像正常情况一样加载视图,并且不会运行任何后续代码。

这是一个很好的问题。经过大量的谷歌搜索,我目前正在以这种方式抛出我的错误页面:

helpers/X.php

function load_404_page_then_die($obj)
{
    $obj->output->set_status_header(404);
    load_page_with_great_races_sidebar($obj, 'errors/html/error_404_custom');
    send_view_then_die($obj);
}
function send_view_then_die($obj)
{
    // Force the CI engine to render the content generated until now    
    $obj->CI =& get_instance();
    $obj->CI->output->_display();
    die();
}

控制器/X.php

$data['volunteer'] = $this->volunteer_model->get_volunteer_by_id($volunteer_id_and_text) OR load_404_page_then_die($this);

另一种方法是在控制器的公共方法中使用"return"。然而,这会导致代码不适合一行,并且在控制器的私有方法中或在帮助文件中不能使用此技术。

控制器/X.php

$data['volunteer'] = $this->volunteer_model->get_volunteer_by_id($volunteer_id_and_text);
if ( empty($data['volunteer']) )
{
    load_404_page($this);
    return;
}

您应该在控制器方法的末尾调用load->view。如果停止执行,则不会加载主题的其他部分。视图文件内容将仅被渲染。您可以将此方法用于ajax调用,在这些调用中,您不希望呈现任何其他内容,除非您希望呈现为ajax调用的输出。

AFAIK,您不能,因为Codeigniter必须在加载视图后运行其他脚本,例如CI需要从Output类调用display()方法来渲染视图。在你的情况下(如果我没有误解的话),我建议你在控制器的末尾加载你的视图。

我知道我很晚了。但这是解决方案。则必须将其输出到display。万一任何一个新手遇到同样的问题,我觉得这将是理想的选择。

$this->load->view('myView');
$this->output->_display();
die;