2014-09-27 2 views
2

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

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

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

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

+0

Ну, дело в том, что CodeIgniter не имеет ничего общего с MVC (кроме использования его в качестве инструмента маркетинга). Что касается «проверки формы», то в правильной настройке MVC вы должны (и будете) иметь возможность отделять уровень представления от уровня модели. Не имеет значения, что данные поступают из html-формы. Правила проверки ** ARE ** часть бизнес-правил. Вот почему это должно происходить * внутри * слоя модели.В частности - внутри [объектов домена] (http://c2.com/cgi/wiki?DomainObject). –

ответ

1

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

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

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

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

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

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

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