0

我正在使用 codeigniter 并有一个主视图,它根据我传递的参数调用另一个视图,因此例如我可能会从控制器传递类似这样的内容:

$data['view'] = 'login';

$this->load->view('main', $data);

这一切都很好而且花花公子,但是,我试图同样很好地传递我的错误页面。在我的错误页面中,我有一些类似于我的控制器的东西,我在其中设置了一个视图,然后调用主视图。

如果我还没有处理任何视图,这可以正常工作,例如,如果我在控制器中收到 PHP 错误。但是,如果我在视图中遇到错误,它将处理主视图两次(因此 html/head/body 标记两次)

如果我只是在没有主视图的情况下吐出错误页面,则内容可能会出现在任何地方,例如标题标签,所以我需要重新生成整个页面。

我知道它正在处理当前视图,因此清除当前正在生成输出的东西的输出并没有什么意义,但无论如何都可以这样做。这意味着当错误页面命中时,清除生成的任何内容,然后从错误页面输出任何内容?

4

3 回答 3

1

数据字符串是个好主意,但是我真的不想在应用程序中重写任何东西,我们必须有大约 200 个视图。

我最终在 PHP 中使用对象缓冲区并将其放在每个错误文件的顶部:

ob_end_clean();
ob_end_flush();
@ob_clean();

ob_start();
ob_clean();

//show code

exit();
于 2012-05-31T13:47:03.897 回答
0

您可以通过将视图作为数据返回而不是将它们发送到浏览器来构建字符串:

$output = $this->load->view('my_view', $data, TRUE);

然后在最后,设置最终的输出字符串:

$this->output->set_output($output);
于 2012-05-30T22:29:39.057 回答
0

您可以在视图中调用视图。

因此,如果您在控制器中按照您所说的去做:

$data['view'] = 'login';
$this->load->view('main', $data);

然后在 main.php 视图文件中,您可以执行以下操作:

<? if(isset($view)):
$this->load->view($view);
endif;?>

如果您将多个值发送到该部分的主视图中,您也可以在那里使用嵌套的 if 或 switch 语句,我可能会将其全部包装在容器 div 中,因为这就是我的角色。如果它引发错误,您可以调整路径。

于 2012-05-31T00:58:20.497 回答