консультации по дизайну MVC, генерация просмотров в контроллере

Я использую PHP Codeigniter банкомат. Я прочитал пару постов, в которых подчеркивается «Толстая модель и тонкий контроллер» и что модель должна обрабатывать всю бизнес-логику, иметь методы, которые имеют непосредственное отношение к базе данных, а контроллеры имеют дело непосредственно с пользовательским вводом. Следуя этим правилам, представляется необходимым косвенно передавать данные массива $ _POST в модель через контроллер. Но иногда гораздо проще и почти необходимо иметь дело с пользовательскими данными непосредственно в контроллере.

Класс CI form_validation также не позволяет вам устанавливать пользовательские сообщения об ошибках в form_validation.php в файле конфигурации. Для этого нам нужно написать методы call_back. Но если мы собираемся написать методы call_back для каждого поля, контроллер получит «толстый», а также зачем мне вообще использовать класс form_validation.

Другое дело, что часто я нахожу необходимость генерировать контент в соответствии с базой данных и пользовательским вводом и т. Д. Но выполнение этого в контроллере, кажется, идет вразрез с «разделением логики и представления». Например, в CI есть форма и помощник по таблицам, нумерация страниц и т. Д. Это все элементы презентации. И запись их в контроллер сделает контроллеры жирными снова. Так что, я думаю, мне следует написать методы контроллера для генерации представления или мне следует написать модель или библиотеку для работы с презентацией?

Буду признателен за полезные советы и советы по общему подходу MVC. Спасибо.

2

Решение

Вы можете взглянуть на то, как это делается в CakePHP, они пытаются приблизиться к архитектуре MVC.

Но иногда гораздо проще и почти необходимо иметь дело с пользовательскими данными непосредственно в контроллере.

Вы почти никогда не хотите этого делать. Все становится намного чище, когда контроллеры просто вызывают несколько методов модели. Это поощряет повторное использование кода, потому что тогда вы можете легко ссылаться на тот же метод модели в другом контроллере.

Для этого нам нужно написать методы call_back. Но если мы собираемся написать методы call_back для каждого поля, контроллер получит «толстый», а также зачем мне вообще использовать класс form_validation.

Для проверки формы модель имеет validate свойство с массивом полей для проверки и есть общий validates метод на всех моделях, который проверяет сохраняемые данные на соответствие модели validate имущество. Затем он может «сделать недействительным» одно поле в данных и передать его обратно в представление, которое отображает ошибку в этом поле.

Так что, я думаю, мне следует написать методы контроллера для генерации представления или мне следует написать модель или библиотеку для работы с презентацией?

Напишите класс помощника. Классы Helper обрабатываются как общий код между представлениями, а не как часть контроллеров.

1

Другие решения

Других решений пока нет …