我有一个经常遇到的模式,我正在寻找一种解决这个N + 1
相关问题的ZF2(ZF3)方法。
以下是单个PHP文件的摘录:
循环播放数据库记录&用数据构建表行
打印一些数字(比如N)表格行:
<?php
for ($i = 0; $i < db_num_rows($result); $i ++)
{
$row = db_fetch_array($result);
?>
<tr onclick="js_action(<?=$row['id']?>)">
<td><?=$row['number']></td>
<td><?=$row['company']?></td>
</tr>
<? } ?>
需要仅打印一次的单个嵌入式JS脚本
<script type="text/javascript">
function js_action(id)
{
// some JS code
}
</script>
问题
我想将视图生成与数据库分开,我的主要关注点是。 。 。使用partialLoop
查看帮助程序或完全跳过它?
我可以使用partialLoop
来创建这样的文件:
//controller
$this->partialLoop('filename', $arrayRows);
<!-- view -->
<td>$this->number</td>
<td>$this->company</td>
我没有看到为这个小循环创建一个如此小的文件。在我的案例中实现View Script的好方法是什么?
答案 0 :(得分:1)
文档中已经提到了partialLoop
的主要用例(重点已添加):
主要用于可重复使用的模板片段
将标记拆分为另一个模板的唯一原因是可重用性。如果您不需要重复使用标记,则没有理由做更多的事情并定义额外的模板。这使得阅读和阅读保持模板更难。
相反,在视图中使用foreach
循环非常好:
<script type="text/javascript">
function js_action(id)
{
// some JS code
}
</script>
<table>
<?php foreach ($this->arrowRows as $row) { ?>
<tr>
<td><?php echo $row['number']; ?></td>
<td><?php echo $row['company']; ?></td>
</tr>
<?php } ?>
</table>
即使您将此代码段放置了几次,也可以将其保留到位而不是创建这样的小视图脚本。对我来说,这似乎是过度优化。
我通常遵循以下原则:
echo
某些值的更复杂逻辑的代码移动到简单标记中(例如条件渲染)