Валидацию можно сделать ответственностью модели, но совершенно не в той форме, в которой Вы предлагаете.
Можно сделать, чтобы сэттеры при передаче им некорректных данных выбрасывали исключение. Которое отлавливать в контроллере и информировать представление.
Но в этом случае возникает множество проблем. Например, как проконтролировать, чтобы никакой сэттер не изменил данные, если хотя бы один из сэттеров выбросил исключение.
Поэтому делать валидацию данных ответственностью модели не следует, а вместо этого следует поручить это контроллеру, который и будет это контролировать.
Форма в том виде, в котором она представлена в Zend_Form, — это CV. И это очень плохо, как и MV, как и MC, как и любое другое смешение. M, V и C все должны быть строго отдельно, а как они взаимодействуют, уже дело другое.
Сделать форму как отдельную область контролирования; отдельно сделать набор вью-хэлперов или тех же декораторов как отдельную область представления — так я вижу формы.
Интересно, каким образом можно было счесть 2010-й год високосным. Он же не делится на 4 вообще. Распространена ошибка, когда считают каждый год, который делится на 4, високосным, забывая о том, что в григорианском календаре есть нюансы; но чтобы 2010-й посчитать високосным, это совсем странный алгоритм надо использовать.
Какой аргумент? У Вас отсутствуют знания о базовых принципах архитектуры MVC («впервые слышите»). Я предлагаю Вам восполнить этот проблем и рекомендую, с чего начать.
Форма по самой своей природе является контроллером. В этом легко убедиться, записав форму без использования Zend_Form. Вынести в отдельный компонент захочется код, расположенный в SomeController::someAction.
Захочется вынести и HTML-код представления формы и её элементов. Но это уровень представления, а не контроллера и не модели. Для этого нужно сделать отдельный слой компонентов (похожих на зэндовские форм-декораторы), который будет привязываться к форме на уровне представления.
Если спросить меня, какой самый плохой компонент в Zend Framework, я отвечу: формы. Это ужасающее, душераздирающее нарушение MVC. Смешение, столпотворение и каша.
А в чём навороты? Главная составляющая цены, говорят, — экран, поскольку технология пока новая. Поэтому и стоят все примерно одинаково (при одинаковой диагонали).
После того, как пользователь привыкнет уверенно выполнять базовые задачи в приспособленном окружении, перейти к другому интерфейсу или более сложным задачам будет гораздо проще.
Можно сделать, чтобы сэттеры при передаче им некорректных данных выбрасывали исключение. Которое отлавливать в контроллере и информировать представление.
Но в этом случае возникает множество проблем. Например, как проконтролировать, чтобы никакой сэттер не изменил данные, если хотя бы один из сэттеров выбросил исключение.
Поэтому делать валидацию данных ответственностью модели не следует, а вместо этого следует поручить это контроллеру, который и будет это контролировать.
Очень грубая ошибка.
Попробуйте всё-таки почитать «Википедию».
Ещё раз повторяю, запишите форму без использования Zend_Form — увидите сами.
Хорошо, сделаю это за вас.
Простейший пример: форма редактирования имени контакта.
Контроллер:
Представление:
Сделать форму как отдельную область контролирования; отдельно сделать набор вью-хэлперов или тех же декораторов как отдельную область представления — так я вижу формы.
Захочется вынести и HTML-код представления формы и её элементов. Но это уровень представления, а не контроллера и не модели. Для этого нужно сделать отдельный слой компонентов (похожих на зэндовские форм-декораторы), который будет привязываться к форме на уровне представления.