Пишет файл на диск какая-то универсальная библиотека, типа Zend_File. Ей можно кидаться исключениями. Модель же должна это исключение поймать и обработать. Не вижу противоречий. А вот почему сама модель данных не может кидаться исключениями при проваленной валидации, я не понимаю и ответа на свой вопрос тут не получу.А как сделать без этого на моем примере? Загрузится файл на сервер или нет, мы не можем проверить на этапе валидации. Нам об этом загрузчик по факту скажет. И получается, сказать нам об этом он должен не исключением... Либо выдать исключение, но программа должна заглохнуть, а полльзователь получить 500 ошибку
try {
$model->doSmth();
} catch (ValidationException $e) {
$errors = $model->getErrors();
// нет никакого смысла пропихивать getErrors в $e - получится бессмысленное дублирование
}
Да не важно, что оно возвращает.Lionishy
Я понемногу начинаю понимать. Т.е. модель должна полностью взять на себя формирование данных об ошибке валидации, а не делегировать эту возможность контроллеру? Немного теряется гибкость, но зато увеличивается простота конструкции, getErrors возвращает простой массив со структурой вроде field: error_text. Так?
Может быть. Хотя мне не кажется это более удобным, чем if / elseудобно использовать механизм исключений
Похоже.fixxxer
Возможно, я не совсем понял назначение модели и не отличаю ее от стороннего компонента.
О, Delta White, прикольненько.
class BetaException extends Exception {}
class B
{
final public function foo()
{
try {
$obj = new A()
$obj->baz(); // на этом месте будет ошибка
} cath(AlphaException $e) {
throw new BetaException('свое сообщение об ошибке');
}
}
}
я поэтому и спрашиваю.Не надо так делать.
я совершенно не про это.Скорее всего, проблема в неправильном именовании исключений
Кому ты должен?Я должен выводить ошибки из исключения связанные с оберткой (класс Б)
...
} cath(AlphaException $e) {
throw new BetaException('свое сообщение об ошибке', 0, $e);
}
....
жаль.Специального сахара для этого нет.