MVC [Zend Framework]: где применять фильтрацию и проверку - PullRequest
3 голосов
/ 24 декабря 2010

У меня (я надеюсь) очень простой вопрос для экспертов из структуры MVC:

где применять фильтрацию и проверку входных данных? Контроллер или модель?

Я прочитал много учебников и руководств по фильтрации пользовательского ввода, но не заметил много обсуждений, где его следует применять. При использовании форм это просто, на самом деле почти все сделано для вас Zend_Form через Zend_Filter и Zend_Validate.

Но когда мне нужно отфильтровать одно значение из пользовательского ввода и передать его в модель, каков наилучший способ очистки перед передачей в модель или в саму модель?

Предположим, я создаю модель, которую будут использовать и другие люди, и она выполняет важную работу с файловой системой. Я уверен на 100%, что другие люди правильно подготовят параметры, прежде чем передать их модели? Я не так, поэтому лучше всего будет очистить параметры в самой модели.

Но это только мои мысли, и, как я уже говорил, я бы хотел услышать ваши мысли от мастеров профессии;)

Хороший день.

Ответы [ 3 ]

2 голосов
/ 24 декабря 2010

ИМХО, это зависит от того, знаете ли вы заранее, какой вид проверки вам придется сделать.

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

Примеры.

Вы должны проверить адрес электронной почты: контроллер, чтобы модели можно было передать какой-нибудь очищенный ввод и просто позаботиться о фактической обработке.

Вы должны проверить, существует ли путь в файловой системе: контроллер позаботится о том, чтобы убедиться, что это правильно построенный путь; модель проверит, существует ли она в рассматриваемой файловой системе.

Вы должны проверить, может ли предоставленная пользователем строка $ x создать хеш $ y, который вы где-то сохранили: модель.

1 голос
/ 24 декабря 2010

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

0 голосов
/ 24 декабря 2010

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

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