我正在尝试找出为我正在编写的PHP模板类实现RoR样式的部分/集合的最有效方法。对于那些不熟悉rails的人,我想迭代位于单独文件中的模板片段(比如表行或列表项)。我想这样做 而不是依靠eval或在循环中放置一个包含 。
我见过一个similar post来解决单个部分,这些部分是微不足道的,但没有任何内容可以涵盖在集合中实现部分内容。我一直在考虑这个问题,这么长时间我的头疼,我担心我会忽略一个明显的解决方案。我希望这里有人可以提出一个优雅的解决方案,再次,不需要eval或包含在循环中。 TIA。
答案 0 :(得分:1)
你需要一个模板引擎,它可以自己处理包括然后立即评估整个事物。很像c预处理器的工作原理。
第1步(来源模板):
$template = '
foreach($bigarray as $record)
#include "template_for_record.php"
'
第2步(预处理后):
$template = '
foreach($bigarray as $record)
// include statement replaced with file contents
echo $record['name'] etc
'
第3步(最终渲染)
// eval() only once
eval($template);
通过这种方式,您可以避免在每个循环步骤中进行evaling /包括子模板的开销。
答案 1 :(得分:0)
你问的是如何在不诉诸解决方案的情况下做点什么。
你使用的任何模板系统都会在循环中使用eval或include,即使它埋藏在1000层深的抽象中。
这就是它的完成方式。