В случае с моделью, я бы сделал так (ну, то есть, я именно так и делаю).
$model->validate() возвращает true/false, в случае false можно посмотреть $model->getValidationErrors() (или просто отрендерить модель прямо с ошибками). Важно, что тут мы проверили все поля, а не остановились на первом.
А вот если дергаем $model->save() с ошибками валидации (save валидацию тоже делает внутри) - это уже exception.
Конечно, валидацию надо делать "ленивой", не проверяя одно и то же сто раз.
(Псевдо)код экшена контроллера тогда будет примерно такой:
$model->validate() возвращает true/false, в случае false можно посмотреть $model->getValidationErrors() (или просто отрендерить модель прямо с ошибками). Важно, что тут мы проверили все поля, а не остановились на первом.
А вот если дергаем $model->save() с ошибками валидации (save валидацию тоже делает внутри) - это уже exception.
Конечно, валидацию надо делать "ленивой", не проверяя одно и то же сто раз.
(Псевдо)код экшена контроллера тогда будет примерно такой:
PHP:
$model->updateAttributesFrom($request->post);
if ($model->validate()) {
$model->save();
return $this->redirectTo($this, 'index');
}
$view->bind('model', $model);
return $this->render($view);