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

Лучшее место для проверки в модели/представлении/модели контроллера?

Я работаю над проектом PHP, который широко использует шаблон проектирования MVC. Я хочу добавить валидацию в форму, и мне интересно, какое правильное место для проверки.

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

Каковы преимущества?

4b9b3361

Ответ 1

Если вы проверяете данные на стороне клиента (например, проверку Javascript), которая абсолютно не достаточна и не защищена вообще, вы должны реализовать ее в представлении.

Если вы проверяете данные на стороне сервера, и ваша проверка не требует бизнес-логики приложения (т.е. вы не проверяете, имеет ли пользователь достаточный кредит в своей учетной записи), вы должны проверить его в контроллере.

Если для проверки требуется бизнес-логика, выполните ее внутри модели и вызовите ее через контроллер.

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

Вы можете использовать regex для большей части проверки, которая имеет тот же синтаксис (почти) на PHP и JS.

Ответ 2

Правильное место для проверки - Модель.

Это имеет наибольший смысл, потому что вы выполняете проверку данных, что представляет собой модель. Что касается обновлений CRUD, модель всегда должна использоваться как-то.

  • Если вы меняете данные из view, вы должны иметь проверки проверяются.

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

  • И, наконец, если у вас есть сама модель меняет данные, вы все равно должны иметь подтверждения.

Единственный способ добиться этого состояния - проверить валидацию в модели.

Из-за производительности и более быстрого ответа, после внедрения валидаций в модели, вы должны попытаться добавить некоторую клиентскую сторону (JS), чтобы немедленно уведомить конечного пользователя.

Валидация всегда относится к данным. Почему вы проверяете данные? Таким образом, вы можете сохранить целостность информации, которую вы храните. Наличие валидаций на уровне модели позволяет теоретически всегда быть правильными. Это всегда необходимо. Оттуда вы можете добавить дополнительные проверки в своей бизнес-логике и на стороне клиента, чтобы сделать ваше приложение более удобным.

Ответ 3

Валидация в модели, по-видимому, является наиболее распространенным подходом (вы получаете что-то вроде $obj->isValid()), и это подходит во многих ситуациях.

Однако, в зависимости от вашего варианта использования, могут быть веские причины для выполнения проверки вне модели, либо с использованием отдельного кода проверки, либо в контроллере и т.д.:

  • Если большая часть общей проблемы проверки включает информацию, недоступную модели (например, если пользователь-администратор может выполнять преобразования, которые обычный пользователь не может или некоторые свойства не могут быть изменены после определенной даты), тогда вы можете захотеть чтобы проверить все эти ограничения в одном и том же месте.
  • При построении объектов для тестов также может быть удобно или необходимо применять очень слабые правила проверки. (Для объекта "корзина" обычно может потребоваться связанный пользователь, который, в свою очередь, требует действительного адреса электронной почты и т.д. 100% действительный объект корзины покупок может быть неудобным для создания в модульных тестах корзины покупок.)
  • По историческим причинам правила проверки могут измениться (например, принудительное использование "пола", где ранее не было необходимости), и поэтому вы можете получить разные версии данных, которые нужно обрабатывать по-разному. (Различные правила валидации могут также применяться к импорту массовых данных.)
  • Если проверка очень сложна, вы можете предоставить различные сообщения об ошибках (или вообще ничего) в зависимости от того, что наиболее полезно для вызывающего. В других ситуациях true или false может быть всем, что необходимо.

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

Ответ 4

Не путайте с дезинфекцией или очисткой опубликованного значения с помощью проверки. Вы должны получить опубликованные значения и счистить их, удалив любые вредоносные элементы из значений в контроллере. Затем отправьте данные в Модель для проверки на ожидаемые значения или формат. Разбирая эти действия на две процедуры, вы уменьшаете риск появления вредоносного кода. Этот метод работает хорошо, если вы используете политику "доверие никому"; зная, что некоторые программисты могут стать неаккуратными или ленивыми. Другая положительная сторона мешает вашей модели стать раздутой и переработанной, если это так, то используйте вспомогательную модель для выполнения грязной работы. Этот подход также поможет сбалансировать нагрузку на приложение и повысить производительность.