MVC, обработка данных POST, подготовка значений полей формы - PullRequest
1 голос
/ 11 марта 2010

Я использую Codeigniter для разработки приложения и читаю биты о Ruby на Rails. В частности Skinny Controller, Fat Model, казалось, имеет смысл. Это действительно позволяет мне смотреть на контроллер и знать, что на самом деле происходит, и позволяет очень и очень быстро настраивать и исправлять ошибки.

Однако у меня есть один камень преткновения: где мне обрабатывать данные POST? Должен ли я вызвать это в кучу переменных в контроллере и передать это в модель. Или я просто получаю к нему доступ прямо из модели?

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

Любое руководство с благодарностью.

Ответы [ 5 ]

1 голос
/ 11 марта 2010

Есть несколько способов справиться с этим, но, как правило, он не считается согласованным для представления, вызывающего $this->CI->input->post( $item ). Как правило, ваш взгляд лучше, если он ограничен только отображением данных, и единственные вызовы функций, которые он должен выполнять, это вызовы типа anchor, lang и др. Также лучше избегать того, чтобы ваши модели собирали данные извне, особенно когда они могут передаваться в информации (возможными исключениями являются данные о языке и конфигурации). Традиционное разделение задач в CodeIgniter заключается в том, что Модель хранит данные, а представление отображает данные, и Контроллер манипулирует ими (иногда это будут библиотеки, манипулирующие данными, а Контроллер вызывает библиотечные функции).

Предварительное заполнение является более понятным, если информация передается в представление, а затем выводится из представления как <?php echo $value; ?>, но есть некоторые исключения .

По сути, я следую этим правилам:

  • Модель не получает сохранения ввода от контроллера.
    • Вызывает только вспомогательные функции и библиотечные методы, если требуется манипулирование.
    • Она манипулирует данными, только если данные должны быть сохранены в конкретный способ (например: сериализация и т. д.).
  • Представление не получает сохранения ввода от контроллера.
    • Вызывает только вспомогательные функции для поиска строк и не использует библиотечные методы.
    • Единственный раз, когда ему нужно манипулировать данными, это когда они поиск конфигурации или языковых данных. Это следует понимать как перевод.
0 голосов
/ 12 марта 2010

CodeIgniter имеет замечательную библиотеку form_validation, которая работает в контроллере: http://codeigniter.com/user_guide/libraries/form_validation.html#overview

После того, как данные $ _POST были быстро и легко проверены библиотекой form_validation, в соответствии с вашими заранее установленными правилами вы передаете проверенные данные в модель и / или представление.

0 голосов
/ 11 марта 2010

Контроллер должен выполнять всю обработку данных.

Используйте свой контроллер, чтобы получить данные POST, а затем передать их модели.

Модель подтверждает, что все прошло нормально, передавая true обратно в контроллер.

В этот момент контроллер передает данные для показа в успешное представление.

0 голосов
/ 11 марта 2010

Я не уверен, что здесь за «правило», но я обычно придерживаюсь только проверки того, что нужно сделать в контроллере. Так что узнайте, что было опубликовано, и что должно произойти дальше. Обычно это вызов модели для выбора, обновления и т. Д., Включая данные POST, которые затем обрабатываются в модели в зависимости от вызываемой функции.

Что касается предварительного заполнения, я всегда стараюсь держать всю эту логику вне поля зрения. Поэтому в контроллере я проверяю, какие переменные должны отображаться (либо данные по умолчанию, либо данные POSTed), а затем отправляю их в представление. Таким образом, представление остается простым, и единственное, что вам нужно сделать, это отобразить переменную.

0 голосов
/ 11 марта 2010

http://teknoid.wordpress.com/2009/01/06/another-way-to-think-about-mvc/

Похоже, что Модели (банкиры) никогда не должны говорить напрямую с View (клиент) и наоборот. Поэтому всегда используйте контроллер (кассир) в качестве посредника.

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