Исключения как способ уведомления пользователя об ошибке
Например, пользователь пытается залогиниться на сайте и вводит почту и пароль, отправляет на сервер. Сервер смотрит по БД и не находит такой адрес.
Он должен вернуть сообщение об ошибке. Сейчас у меня в модели юзера бросается для этого исключение и ловится контроллером, который и показывает сообщение.
Собственно вопрос - правильно ли я поступаю? Может лучше здесь прикрутить отдельный механизм, вроде $my_error->new('Залогинься!');
В любом случае ошибки собираются в кучу и выводятся.
С одной стороны меня терзают сомнение, вдруг я где-то не поймаю исключение и весь скрипт завалится, напугав до смерти пользователя. А с другой это очень удобно.
Пример:
Код:
try{
$user->login($email, $password);
}catch(User_Exception $e){
$errors[] = $e->getMessage();
}
$user->login($email, $password);
}catch(User_Exception $e){
$errors[] = $e->getMessage();
}
Смахивает на догму, конечно, да. Тем не менее, существует несколько причин так считать.
Во-первых, при таком подходе настоящие ошибки смешиваются с такими вот наведёнными. Во-вторых, бэкэнд (модель) от этого заметно тяжелеет, расплывается, описать его обязанности становится сложнее, приходится лезть в его потроха, для того чтобы понять, как обрабатывать такие ситуации. С локализацией вообще беда. В более общем случае, исключение даёт информацию об ошибке, но не говорит как её исправить.
Вопрос исключительно вкуса. Можно делать и так и так. Главное все сделать правильно. Я стараюсь использовать эксепшены для исключительных ситуация - необрабатываемые ошибки или ситуации которых просто не должно случится. Такие вещи как некорректно введенный пароль - это вообще не ошибка.