【问题标题】:Where to put a recursive function when following MVC?遵循 MVC 时在哪里放置递归函数?
【发布时间】:2010-06-11 09:41:58
【问题描述】:

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

我目前已经将此函数放在代码的模型部分,但是,我觉得在模型中生成 html 违背了 MVC。 我没有把它放在控制器中,因为我不想在那里进行数据库调用或 HTML 生成。 我没有把它放在 View 中,因为我也不想在那里调用数据库。

解决此问题的“正确”方法是让控制器调用模型中的递归函数,该函数返回表示菜单的二维数组。然后将数组传递给视图,该视图具有自己的递归函数,用于从数组生成 html?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】: