我试图找出为我正在编写的 PHP 模板类实现 RoR 样式的部分/集合的最有效方法。对于那些不熟悉 rails 的人,我想遍历位于单独文件中的模板片段(例如表格行或列表项)。我想在不诉诸 eval 或在循环中放置 include 的情况下做到这一点。
我看过一篇类似的帖子,它解决了单个部分,这很简单,但没有涉及在集合中实现部分。我一直在考虑这个问题,我的头很痛,我担心我忽略了一个明显的解决方案。我希望这里有人可以提出一个优雅的解决方案,同样,不需要 eval 或包含在循环中。TIA。
我试图找出为我正在编写的 PHP 模板类实现 RoR 样式的部分/集合的最有效方法。对于那些不熟悉 rails 的人,我想遍历位于单独文件中的模板片段(例如表格行或列表项)。我想在不诉诸 eval 或在循环中放置 include 的情况下做到这一点。
我看过一篇类似的帖子,它解决了单个部分,这很简单,但没有涉及在集合中实现部分。我一直在考虑这个问题,我的头很痛,我担心我忽略了一个明显的解决方案。我希望这里有人可以提出一个优雅的解决方案,同样,不需要 eval 或包含在循环中。TIA。
你需要一个模板引擎,它可以自己处理包含,然后一次评估整个事情。很像 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);
通过这种方式,您可以避免在每个循环步骤中评估/包含子模板的开销。
您在问如何在不求助于解决方案的情况下做某事。
您使用的任何模板系统都将在循环中使用 eval 或 include,即使它隐藏在 1000 层深的抽象中。
这就是它的完成方式。