首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现ZF2视图而不使用partialLoop视图助手?

如何实现ZF2视图而不使用partialLoop视图助手?
EN

Stack Overflow用户
提问于 2016-03-22 16:13:15
回答 1查看 30关注 0票数 1

我有一个我经常遇到的模式,我特别想找一种ZF2 (ZF3)方法来解决这个N + 1-related问题。

以下是单个PHP文件的摘录:

遍历DB记录&用数据构建表行

一些数字(例如N)表行被打印出来:

代码语言:javascript
复制
<?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脚本

代码语言:javascript
复制
<script type="text/javascript">
function js_action(id)
{
    // some JS code
}
</script>

问题

我想将视图生成从DB中分离出来,我主要关注的是。。。我是使用partialLoop视图助手还是完全跳过它?

我可以使用partialLoop,它让我创建这样的文件:

代码语言:javascript
复制
//controller
$this->partialLoop('filename', $arrayRows);

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

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

EN

回答 1

Stack Overflow用户

发布于 2016-03-24 18:39:50

文档中已经提到了partialLoop的主要用例(重点是添加的):

主要用途是可重用模板片段。

将标记拆分为另一个模板的唯一原因是可重用性。如果您不需要重用标记,就没有理由去做额外的工作并定义一个额外的模板。这使得读取和维护模板变得更加困难。

相反,在视图中使用foreach循环是非常好的:

代码语言:javascript
复制
<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次以上时,才能将某物移动到单独的模板中。
  • 只将包含一些值的更复杂逻辑的代码移动到简单的标记中(例如,条件呈现)。
  • 简单的标记可以被嵌入,即使它被重复使用(例如,简单的表只有很少的类)。
  • 不要试图泛化父视图定义标记行为的部分(例如,视图定义要在部分中使用的额外类)。这通常会使一切变得更加复杂和耦合,而不是被帮助。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36159638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档