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

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

У меня есть модель, в которой написан метод регистрации, но в методе так же присутствует проверка на то, была ли нажата кнопка, были ли заполнены поля. С точки зрения mvc, проверки isset не должны быть в модели? Их наверное лучше в контроллер вынести? 

 в MVC нет чёткого определения, куда отнести валидацию. В то же время, MVC не описывает абсолютно всё приложение, только идею. В популярных фреймворках типа Symfony и Zend есть специальные штуки - формы, которые собирают в себя массив пришедших данных, а возвращают заполненный объект, если данные прошли проверку, либо возвращают массив ошибок. Часто практикуют использование формы в контроллере: там сеттятся данные из реквеста в форму, затем происходит проверка формы на наличие ошибок, и если они есть, контроллер возвращает сообщение об ошибке, иначе забирает заполненный объект с данными и передает его в нужный сервис. 

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

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

В контроллер попадает уже этот типизированный объект запроса.  
  

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

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

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

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

> С точки зрения mvc, проверки isset не должны быть в модели? Их наверное лучше в контроллер вынести?

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

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