uid
Новичок
Собственно, родилась у меня мысль, как избавиться от однотипного кода при обработке ошибок.
Классический пример: из контроллера запрашиваем у модели какую-то сущность, например, информацию о пользователе по его имени. Модель может не захотеть отдавать нам эти данные по куче причин. Обычно обработка ошибок сводится к одному из двух вариантов:
или
Причем действия для показа страницы ошибки обычно весьма однотипны. А что, если исключения не обрабатывать до самой точки запуска приложения? Код
содержит всю необходимую информацию для отображения дефолтной страницы ошибки. От случайного показа юзеру исключений с системными сообщениями защищает проверка кода исключения и его типа: если $e instanceof MyAppException == false или $e->getCode() == 0, то исключение у нас системное и показывать его текст не надо. Таким образом, можно вынести логику обработки всех типовых ошибок в точку запуска приложения и писать просто
, не думая об исключениях. Если будет нужно, всегда можно перехватить их и обработать по-своему.
Насколько рационально использование такого подхода в реальных проектах?
Классический пример: из контроллера запрашиваем у модели какую-то сущность, например, информацию о пользователе по его имени. Модель может не захотеть отдавать нам эти данные по куче причин. Обычно обработка ошибок сводится к одному из двух вариантов:
PHP:
$model = new Model_User();
$user = $model->getByName($request->username);
if($errors = $model->getErrors()){
// страница ошибки
}else{
return $this->render('userpage', $user);
}
PHP:
try{
$model = new Model_User();
$user = $model->getByName($request->username);
return $this->render('userpage', $user);
}catch(UserException $e){
// страница ошибки
}
PHP:
throw new UserException('пользователь не найден', 404);
PHP:
$model = new Model_User();
$user = $model->getByName($request->username);
return $this->render('userpage', $user);
Насколько рационально использование такого подхода в реальных проектах?