【发布时间】:2015-02-23 16:09:07
【问题描述】:
我纯粹出于学习目的尝试推出自己的 MVC,但是当我尝试加载视图文件时遇到了障碍。这是我的问题:
前端控制器抓取适当的页面控制器,页面控制器include_once() 适当的视图。视图是一个包含 HTML 和 PHP 的文件。当我从控制器返回包含文件时,包含的文件内容出现与预期的 PAGE 布局顺序不一致。 (例如:我想显示 HEADER CONTENT FOOTER,但是当我包含视图的内容时,我的控制器会吐出 CONTENT, HEADER, 1, FOOTER)。
在我的前端控制器中,我尝试将我包含的文件内容设置为一个变量,然后在 PAGE 模板中的 HEAD 和 FOOTER 之间回显。但这不能按预期工作。我可以将我的视图文件内容包装在:return "code" 中,但我不希望担心我的视图代码中的杂散引号/双引号可能会破坏脚本。我试过file_get_contents(),但这只会吐出一个字符串(尽管在我的模板中的正确位置/序列)并且我的视图文件中的PHP没有正确(即根本没有)。
我的问题是:有没有办法可以在变量中使用include_once() 将视图文件返回到前端控制器?我似乎无法找到足够的答案。如果有帮助,我很乐意添加我的代码。
【问题讨论】:
-
你需要包含你的代码
-
如果要将包含文件渲染到变量中,可以使用输出缓冲。 Here is a simple template engine 我写了演示如何做到这一点(特别是
getRenderedPartial())。如果您希望我在答案中扩展它,请告诉我,但这可能是不言自明的。 -
也就是说,在很多情况下您不需要输出缓冲,因为您可以在正确的位置使用
require()。请参阅renderTemplate()以使用不会破坏全局空间中的变量的本地提供的变量来执行此操作。 -
我最终使用了 ob_start() 但很好奇为什么包含该文件不起作用...我不能将包含的文件放入 $VAR 并像使用其他任何文件一样使用它吗$VAR?
-
@halfer 可以!感谢您的建议和帮助!
标签: php model-view-controller view include