Где правильнее проверять пользовательские данные? В контроллере или модели?
За работу с данными должна отвечать модель. Именно модель должна знать какие данные допустимы, а какие нет, потому что на ней лежит функция обработки/записи этих самых данных.
У контролера цель - обрабатывать пользовательские запросы и решать, как на них ответить.
Иными словами, вы принимаете данные с формы контролером и говорите модели сказать валидные ли данные пришли. Модель отвечает контролеру, контролер принимает решение, как на это ответить пользователю (ошибкой, каким-то конкретным представлением и т.п.).UPDATEMVC советую всем прочесть, прежде, чем давать странные советы. Особенно внимательно прочесть "Наиболее частые ошибки", как раз говориться, что делать из контролера Толстый Тупой Уродливый Контролер - не правильно по определению шаблона. Можно спорить сколько угодно, но об этом прямо многие авторитеты. Другое мнение сформировано отсутствием глубокого понимания MVC и малым опытом на крупных проектах.
Контроллер. Хотя конечно бывают и модели(тут скорее на более низком уровне) с автоматической проверкой данных, но это все же контроллер.UPD
Вот хороший пример:
Валидация никнейма, только латиница.
Проверка на латиницу - в контроллере.
Проверка на дубль с уже существующим - в модели, часть бизнес логики.
Я считаю что из-за ошибки в вводе(когда ввели кириллицу) зазря загружать модель, который часто монстр, не нужно. Быстро и просто отсечь в контроллере.
Иван прав в том что структурно это все же модель, но физически в проектах ситуации разные. Я уточню что я больше говорил про отсечение стандартных ситуаций, которые от модели практическине зависят. В целям производительности их можно и выносит в контроллер, опять таки скорее как руками(контроллер) взяли посмотрели и увидели это ключ до вставки в замочну скважину(модель и основная бизнес логика). А ведь глаза в данном случае смотрят на модель(замочная скважина) и выходит они часть модели.
Так что в целом на 100% прав Иван, при проектировании нужно понимать что любая валидация это часть модели, просто иногда кажется что это часть контроллера или даже представления, но то всего лишь интерфейсы оьбращения через контроллер к модели.
Так что валидация это: получили данные, контроллер знает к какой модели их давать, у модели должен быть инструмент валидации, далее он возвращает результат ну и мы решаем что и как.
Я просто поспешил сказав что валидация часть контроллера, но то что она вызывается в контроллере не отменяет того факта что это часть модели.