我有一个分层数组:
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(' ', $depth * 6) . $item['value'] . '</td>';
echo '</tr>';
if (count($item['children'])) {
print_menu_hierarchy($item['children'], $depth + 1);
}
}
}
我的问题是:放置该功能的位置?
要维护MVC,它必须是视图的一部分。所以,无论是帮助者还是模板。
Helper很明显,但是将这个函数放到帮助器上会使修改视图变得更加困难。每次我在模板中更改某些内容时,我都必须更改帮助程序。此外,这个功能越来越大,保持清洁很难。
模板也是不错的选择,定义函数应该在其他地方完成。
任何人都知道在哪里放这个?
(我正在使用symfony 1.4)
答案 0 :(得分: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(' ', $params['depth'] * 6) . $params['item']['value']; ?></td>
</tr>
答案 1 :(得分:0)
我会帮助它。当您更改模板时,您将不得不修改它。如果它是一个大功能,帮手是最好的地方。这意味着它也可以在不同的地方使用。
此外,MVC可以帮助您。这是一个指南。不要让它阻止你完成工作。每一刻你都在为放置东西感到苦恼,那一刻你实际上并没有解决问题。