Где поставить рекурсивную функцию при следовании MVC? - PullRequest
2 голосов
/ 11 июня 2010

У меня есть рекурсивная функция, используемая для создания меню на моем сайте.Функция вызывает базу данных для каждого уровня детей в меню и генерирует для них html.

В настоящее время я поместил эту функцию в часть кода Model, однако я чувствую, что создание html в модели идет вразрез с MVC.Я не поместил его в контроллер, потому что не хотел, чтобы там были вызовы базы данных или генерация HTML.Я не поместил его в представление, потому что я тоже не хотел, чтобы вызовы базы данных были там.

Это «правильный» способ решения этой проблемы, чтобы контроллер вызывал рекурсивную функцию в модели, которая возвращает2d массив, представляющий меню.Затем передайте массив представлению, которое имеет собственную рекурсивную функцию для генерации html из массива?

Ответы [ 3 ]

2 голосов
/ 11 июня 2010

Как вы предполагаете, наилучшим способом было бы, вероятно, чтобы модель извлекала все данные. И затем предоставьте это представлению в соответствующем формате. Затем сгенерируйте HTML рекурсивно в представлении.

0 голосов
/ 11 июня 2010

Я создал компонент в моего проекта , который извлекает данные меню из базы данных, форматирует массив, содержащий пункты меню, и кэширует его. Затем я создал helper , который берет этот массив и создает HTML-список с элементами меню, которые можно использовать в представлениях и макетах.

Итак, в макете у меня есть: echo $databaseMenus->makeMenu($mainMenu);, где makeMenu - метод помощника, а $mainMenu - массив, предоставленный компонентом.

0 голосов
/ 11 июня 2010

Вы должны вернуться из массива меню модели / вложенных массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...