2016-03-22 128 views
1

我有一個模式,我經常遇到,我正在尋找具體解決這個有點N + 1相關問題的ZF2(ZF3)的方式。如何在不使用partialloop視圖助手的情況下實現ZF2視圖?

下面是從一個單一的PHP文件的摘錄:

通過DB記錄&建築錶行循環用數據

一些號碼(比如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> 

我沒有看到剛剛創建的這個小圈這麼小的文件的一個點。在我的情況下實現視圖腳本的好方法是什麼?

回答

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荷蘭國際集團一些值碼簡單的標記(例如條件呈現)
  • 簡單標記即使在重用時也可以始終嵌入(例如,只有很少類的簡單表)
  • 絕不要試圖推廣父視圖定義行爲t他的標記(例如該視圖定義了在部分中使用的額外類)。這通常會使一切變得更加複雜和耦合,而不僅僅是幫助。
相關問題