我可以使用PHP将include_once文件分配给$ var吗?

时间:2015-02-23 16:09:07

标签: php model-view-controller view include

我试图将我自己的MVC纯粹用于学习目的,但是当我尝试加载视图文件时,我遇到了麻烦。这是我的问题:

前端控制器抓取适当的页面控制器,页面控制器include_once()相应的视图。该视图是包含HTML和PHP的文件。当我从控制器返回包含文件时,包含的文件内容不会出现在预期的PAGE布局序列中。 (示例:我想显示HEADER CONTENT FOOTER,但是当我包含视图的内容时,我的控制器会向内部输出内容,HEADER,1,FOOTER)。

在我的前端控制器中,我尝试将包含的文件内容设置为变量,然后在页面模板中的HEAD和FOOTER之间进行回显。但这不符合预期。我可以将我的视图文件内容包装在:return" code"但是我不希望在我的视图代码中担心可能会破坏脚本的杂散引号/双引号。我已经尝试了file_get_contents(),但这只会吐出一个字符串(虽然在我的模板中的正确位置/序列中)并且我的视图文件中的PHP不正确(即根本没有)。

我的问题是:有没有办法可以使用变量中的include_once()将我的视图文件返回到前端控制器?我似乎无法找到适当的答案。如果有帮助,我很乐意添加我的代码。

1 个答案:

答案 0 :(得分:0)

您可以指定include()的返回值。此功能的一个鲜为人知的功能是您可以拥有这样的文件:

<?php
// config.php

return array('database_host' => 'localhost');

你可以这样阅读:

<?php

$config = include('config.php');

但是,你想要这样做:

<!-- text.html -->
<h1>Heading</h1>
<p>Hello</p>

并用以下内容阅读:

$html = include('text.html);

您可以尝试这样做,但只要include()扫描文件,输出就会发送到Web服务器。这就是PHP的工作原理。此外,由于没有明确的return值,$html变量将返回空白。

因此,我们使用输出缓冲函数来修改PHP的行为:我们开始缓冲,然后我们获取它并清除它。然后不会将其发送到Apache,除非您选择关闭输出缓冲和echo已收集的内容,在这种情况下它会返回正常的输出缓冲区并实际发送。