【问题标题】:How to implement ZF2 View without using partialLoop view helper?如何在不使用 partialLoop 视图助手的情况下实现 ZF2 View?
【发布时间】:2016-07-09 15:36:02
【问题描述】:

我有一个经常遇到的模式,我正在寻找专门的 ZF2 (ZF3) 方法来解决这个与N + 1 相关的问题。

以下是单个 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>

问题

我想将视图生成与 DB 分开,我主要关心的是 . . .我是使用partialLoop 查看助手还是完全跳过它?

我可以使用partialLoop 来创建这样的文件:

//controller
$this->partialLoop('filename', $arrayRows);

<!-- view -->
<td>$this->number</td>
<td>$this->company</td>

我看不出为这个小循环创建这么小的文件有什么意义。在我的情况下,实现视图脚本的好方法是什么?

【问题讨论】:

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


    【解决方案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>
    

    即使您多次使用此 sn-p arround,将其保留在适当位置而不是创建如此小的视图脚本可能是有意义的。对我来说,这似乎是过度优化。

    我通常遵循以下原则:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多