2011-04-20 19 views
3

我具有分层阵列:什么是放置视图功能的最佳场所?

array(
    'id' => 4, //id of current element 
    'parent' => 2, //id of parent element 
    'value' => '', //some value 
    'children' => array() //array of similar arrays 
) 

每个元素可以包含多个元素,它可以包含多个元件等的足以说,最好的方式来迭代此是使用功能,这将致电给自己处理儿童:

function print_menu_hierarchy($hierarchy, $depth = 0) { 
    foreach ($hierarchy as $item) { 
     echo '<tr>'; 
     echo ' <td>' . $item['id'] . '</td>'; 
     echo ' <td>' . str_repeat('&nbsp;', $depth * 6) . $item['value'] . '</td>'; 
     echo '</tr>'; 
     if (count($item['children'])) { 
      print_menu_hierarchy($item['children'], $depth + 1); 
     } 
    } 
} 

我的问题是:放哪个函数?

要维护MVC,它必须是视图的一部分。所以,无论是帮手还是模板。

助手很明显,但将此函数放在助手中会使修改视图更困难。每当我改变模板中的某些东西时,我也必须改变助手。此外,这个功能越来越大,保持干净是很难的。

模板也是不错的选择,定义函数应该在其他地方完成。

任何人有更好的主意在哪里把这个?

(我正在使用symfony 1.4)

+0

我期望佣工只应以某种方式修改数据输出或其他处理。你的功能是创建一个HTML结构的输出,所以我会把它放到视图模板也许......通过这你只能编辑一个模板,并保持只在一个地方的变化...... – shadyyx 2011-04-20 10:12:22

+2

听起来像一个很好的例子领导程序员的模式。使用设计模式让您的生活更轻松,并使您能够编写更敏捷的代码,而不是限制您并阻止您表达。 – 2011-04-20 10:17:05

回答

1

虽然我不清楚你使用的是什么框架,但是函数本身 - 就像你自己说的 - 不属于视图。这个函数应该放在应用程序的帮助器部分。您需要做的唯一更改是从此帮助函数调用视图以获得单个项目,而不是将回声硬编码到您的层次结构爬网程序中。事情是这样的:

function print_menu_hierarchy($hierarchy, $depth = 0) { 
    foreach ($hierarchy as $item) { 
     call_view_function('view_name_for_menu_item', array('item' => $item, 'depth' => $depth)); 
     if (count($item['children'])) { 
      print_menu_hierarchy($item['children'], $depth + 1); 
     } 
    } 
} 

和视图将如下所示:

<tr> 
    <td><?php echo $params['item']['id']; ?></td> 
    <td><?php echo str_repeat('&nbsp;', $params['depth'] * 6) . $params['item']['value']; ?></td> 
</tr> 
+0

我正在使用symfony 1.4。 我想过做类似的事情: include_partial('view_name_for_menu_item',array('item'=> $ item,'depth'=> $ depth)) 但这意味着很多内含物。 – Leszczu 2011-04-20 10:29:17

+0

嗯,我不知道Symphony,但我认为它有一些方便的方法来自动解决视图包含。无论如何,我认为这是解决您的问题的干净方法。 – 2011-04-20 10:32:55

0

我会让它成为帮手。当您更改模板时,您将不得不对其进行修改。如果它是一个大功能,帮手是最好的地方。这意味着它也可以用在不同的地方。

此外,MVC是有帮助你。这是一个指导。不要让它阻碍你完成工作。每一刻,你都在苦苦思索放置事物的时刻,这一刻你并没有真正解决问题。

+0

在同一时刻,您正以接近尽可能最好的方式解决问题。 – 2011-04-20 10:17:44

+0

绝对是。但我们必须始终关注完成工作。 – JohnP 2011-04-20 10:38:20

+0

@Tomalak当然。我的意思是这些模式可以帮助我们,而不会阻碍我们 – JohnP 2011-04-20 10:51:54

相关问题