Подтвердить что ты не робот

Laravel 4 Проверка модели против проверки контроллера

Кажется, что официальный способ проверки моделей в Laravel 4 через Validator в Controller? Может кто-нибудь указать, почему это так?

Не было бы смысла использовать проверку в Model?

4b9b3361

Ответ 1

Я предпочитаю пакет Ardent, чтобы сделать проверку моделей максимально плавной и минимальной. Для меня имеет смысл также иметь правила проверки в модели.

Он вернет false, когда $model->save() вызывается и проверка не выполняется, тогда вы можете получить сообщения об ошибках через $model->errors()->all() например.

Ответ 2

Имеет смысл иметь валидацию в моделях, но эта проверка должна быть только там, чтобы убедиться, что вы не сохраняете поврежденные данные.

Validator находится в Controller, потому что он используется для обработки ввода и генерации вывода. Если вы сделаете проверку в Model, то вам либо нужно будет возвратить значение false, либо покажите пользователю наиболее случайные сообщения об ошибках в отношении недопустимых данных. Вы также можете вернуть некоторые кины массива, содержащие все возникшие ошибки, но что-то, что не должно делать Модель. Или вы можете выбросить исключение, что должно быть сделано, когда модель пытается использовать недопустимые данные, но она убивает приложение, которое не является желаемым решением для проверки формы.

При выполнении проверки формы в контроллере вы можете делать все, что хотите, с сообщениями об ошибках, не изменяя цели модели.

И в вашей модели вы можете сделать валидацию, чтобы убедиться, что вы не допустили ошибку, которая повредит вашу базу данных. Потому что, если это произойдет, приложение должно отключиться.

Итак, чтобы ответить на ваш вопрос: Валидация в модели имеет смысл избежать коррумпированных данных, но если вы хотите дать обратную связь пользователю о некорректном вводе, он должен находиться в контроллере.

Ответ 3

Я боролся с этим некоторое время и решил обработать большую часть моей проверки в службе валидации, основываясь на чем-то вроде this. Тогда у меня могут быть разные правила проверки, основанные на контексте.

Как упоминает Нико, валидация в модели хороша, чтобы избежать коррумпированных данных, но я предпочитаю тонкие контроллеры, поэтому я передаю функции, которые будут сидеть в контроллере в службе. Это также дает возможность повторно использовать проверку в разных контроллерах/методах.

Ответ 4

Почему я предпочитаю проверку внутри модели.. Я работал с обоими стилями, и у каждого есть плюсы и минусы, но я предпочитаю проверку в модели. В нашем текущем приложении я не вижу проверки в контроллере в качестве опции, поскольку мы изменяем наши данные во многих местах (выделенные формы, встроенное редактирование, массовое редактирование, массовая загрузка, api и т.д.). Я никогда не работал с службами валидации (хотя они могут быть опцией), но мне лично нравится поддерживать логику как можно ближе к модели, так что я знаю, что другой разработчик не обойдет ее. Мне также не нравится добавлять много дополнительных файлов поверх папки MVC и базовых библиотек, потому что кажется, что вам больше нужно думать о правильной организации.

Проблемы с проверкой в ​​модели. Это некоторые вещи, которые необходимо учитывать, чтобы хорошо работать в модели. НЕКОТОРЫЕ ИЗ ЭТИ УЖЕ ПРИНИМАЮТСЯ В РАССМОТРЕНИИ ПЛАСТИНАМИ. Я думаю, что другие рамки (CakePHP) уже справляются с этим, но Laravel на самом деле не работает.

  • Значения, которые будут проверены, но не сохранены в db (например, "Accepted_agreement" ).
  • Многие для многих или принадлежат многим отношения
  • Установка условных значений по умолчанию (не критичных, но возможно, захочет подумать в то же время)
  • Различные сценарии формы - иногда вам может потребоваться другая проверка в зависимости от того, какая форма его подает. Ссылка на форму может быть атрибут purgeable для проверки может быть?
  • Как вы получите сообщения об ошибках (все плагины для проверки подлинности в модели обрабатывают это для вас)
  • Различные правила правил проверки. Создание проекта против "реального" создания. (Большинство обрабатывают это для вас)

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