如何将模型层中的消息或输出集成到模板化页面中

时间:2012-05-29 02:26:17

标签: php model-view-controller template-engine separation-of-concerns

我正在使用PHP进行模板化。我知道那里有模板引擎,但我想要一个简单的小项目。 这是我的问题:

我的大多数输出​​存储在变量$ contents中并分配给模板以显示在我页面的内容部分

但有时候我的模型中有回声(“blah blah”)[比如异常情况下,查询失败]我希望将其传递给我的页面。

问题是此输出显示在页面之前,例如

$contents = "I want to show this";

$news = $news->getNews();

//concatenate
$contents = $contents.''.[resultsfromnews]

$template = new Template();
$template->content = $contents; //and so on
$template->display();

如果$news->getNews()方法或它所调用的方法回应了某些内容,例如('数据库特定错误,例外),它们在调用$template->display()之前显示

  

来自getNews()的自定义错误信息/通知,显示在页面内容之前

     

普通网页内容

     

Lorem ipsum dolor sit amet,consectetuer adipiscing elit,sed diam   nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat   volutpat。 Ut wisi enim ad minim veniam,quis nostrud exerci tation   ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat。   Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse   molestie consequat,vel illum dolore eu feugiat nulla facilisis at   vero eros et accumsan et iusto odio dignissim qui blandit praesent   luptatum zzril delenit augue duis dolore te feugait nulla facilisi。   Nam liber tempor cum soluta nobis eleifend option congue nihil   不安的doming id

请帮我解决一下......如何将这些输出作为我要展示的内容的一部分。

我觉得这个问题可能会出现在那里所有流行的模板引擎(Smarty,Twig,phpsavant等) - 它是如何处理的?

* 我一直在寻找一段时间来了解它在其他模板引擎中是如何工作的 - 还没有关闭*

由于

1 个答案:

答案 0 :(得分:1)

回答你的问题:

$contents = "I want to show this";    

ob_start();
$news = $news->getNews();
$buffer = ob_get_contents();
ob_end_clean();

//concatenate
$contents = $contents.$buffer.''.[resultsfromnews]

$template = new Template();
$template->content = $contents; //and so on
$template->display();

但是,不应该在模型中回应。最好在设置输出之前抛出异常并捕获它们。