@Karpkarp

Чья обязанность проверять переменные(isset)?

Пишу простую регистрацию, вопрос такой.

У меня есть модель, в которой написан метод регистрации, но в методе так же присутствует проверка на то, была ли нажата кнопка, были ли заполнены поля. С точки зрения mvc, проверки isset не должны быть в модели? Их наверное лучше в контроллер вынести?
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ответы на вопрос 3
Decadal
@Decadal
в MVC нет чёткого определения, куда отнести валидацию. В то же время, MVC не описывает абсолютно всё приложение, только идею. В популярных фреймворках типа Symfony и Zend есть специальные штуки - формы, которые собирают в себя массив пришедших данных, а возвращают заполненный объект, если данные прошли проверку, либо возвращают массив ошибок. Часто практикуют использование формы в контроллере: там сеттятся данные из реквеста в форму, затем происходит проверка формы на наличие ошибок, и если они есть, контроллер возвращает сообщение об ошибке, иначе забирает заполненный объект с данными и передает его в нужный сервис.
Ответ написан
OnYourLips
@OnYourLips
Это достаточно сложный вопрос, но схема, которую я напишу, наименее проблемная, особенно при длительных проектах.

Это обязанность ассемблера, который собирает типизированный объект запроса. И это не Entity/Model, даже если поля почти совпадают, это отдельный DTO.
В контроллер попадает уже этот типизированный объект запроса.

Если данные не в том формате (ошибка фронтенда, а не пользовательского ввода), то в контроллер они даже не попадают.

Контроллер их уже валидирует валидатором и передает в модель. Соответсвенно если данные не прошли валидацию на контроллере, то в модель они не попадут.

Более того, на уровне модели могут быть свои валидации, ведь данные приходят не только из контроллера и команд.

Однако если у вас простой скрипт с двумя параметрами, который через неделю уже выкинут, то правильнее забить на эти архитектурные изыски и просто получить поля из запроса.
Ответ написан
xmoonlight
@xmoonlight Куратор тега PHP
https://sitecoder.blogspot.com
С точки зрения mvc, проверки isset не должны быть в модели? Их наверное лучше в контроллер вынести?
Лучше, чтобы сайт был практически (или совсем) неломаемым, вынести их в фильтр пользовательских входных данных: в root-уровень, и сразу же проверять на валидность, и только потом уже, передавать на роутинг веб-приложений.

Используйте при валидации regex+preg_match() (вместо тучи isset() в разных местах кода), чтобы сразу знать массив всех входных переменных с установленными значениями и минимизировать риски и нагрузку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы