在跟随MVC时放置递归函数的位置?

时间:2010-06-11 09:41:59

标签: model-view-controller design-patterns cakephp

我有一个递归函数用于在我的网站上生成菜单。该函数为菜单中的每个级别的子级调用数据库,并为它们生成html。

我目前将此函数放在代码的Model部分中,但是,我觉得在模型中生成html与MVC相反。 我没有将它放在Controller中,因为我不想在那里进行数据库调用或HTML生成。 我没有将它放在View中,因为我不想在那里调用数据库。

解决此问题的'正确'方法是让Controller在Model中调用递归函数,返回表示菜单的2d数组。然后将数组传递给一个视图,该视图具有自己的递归函数,用于从数组生成html?

3 个答案:

答案 0 :(得分:2)

正如您所建议的那样,最佳方法可能是让模型获取所有数据。然后以适当的格式将其提供给视图。然后在视图中递归生成html。

答案 1 :(得分:0)

您必须从模型完整菜单数组/嵌套数组返回。

答案 2 :(得分:0)

我在my project中创建了一个组件,它从数据库中检索菜单数据,格式化包含菜单项的数组并对其进行缓存。然后我创建了一个 helper ,它接受该数组并创建一个带有菜单项的html列表,这些菜单项可以在视图和布局中使用。

所以,在布局中我有:echo $databaseMenus->makeMenu($mainMenu);其中makeMenu是帮助器的方法,$mainMenu是组件提供的数组。