如何在不使用partialLoop视图助手的情况下实现ZF2 View?

时间:2016-03-22 16:13:15

标签: model-view-controller view zend-framework2

我有一个经常遇到的模式,我正在寻找一种解决这个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的好方法是什么?

1 个答案:

答案 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>

即使您将此代码段放置了几次,也可以将其保留到位而不是创建这样的小视图脚本。对我来说,这似乎是过度优化。

我通常遵循以下原则:

  • 当我重复使用超过2-3次
  • 时,只将某些内容移动到单独的模板中
  • 仅将包含echo某些值的更复杂逻辑的代码移动到简单标记中(例如条件渲染)
  • 即使重新使用简单标记(例如,类很少的简单表格),也可以随时嵌入简单标记
  • 永远不要尝试概括父视图定义标记行为的部分(例如,视图定义了在部分中使用的额外类)。这通常会使一切变得更加复杂和耦合而不是帮助。