Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Исключения как способ уведомления пользователя об ошибке

21K
26 апреля 2012 года
evil_rabbit
60 / / 27.08.2008
Здравствуйте. Расскажите как лучше (или правильнее) уведомлять пользователя о какой-либо ошибке.
Например, пользователь пытается залогиниться на сайте и вводит почту и пароль, отправляет на сервер. Сервер смотрит по БД и не находит такой адрес.
Он должен вернуть сообщение об ошибке. Сейчас у меня в модели юзера бросается для этого исключение и ловится контроллером, который и показывает сообщение.
Собственно вопрос - правильно ли я поступаю? Может лучше здесь прикрутить отдельный механизм, вроде $my_error->new('Залогинься!');
В любом случае ошибки собираются в кучу и выводятся.
С одной стороны меня терзают сомнение, вдруг я где-то не поймаю исключение и весь скрипт завалится, напугав до смерти пользователя. А с другой это очень удобно.

Пример:
 
Код:
try{
    $user->login($email, $password);
}catch(User_Exception $e){
    $errors[] = $e->getMessage();
}
341
28 апреля 2012 года
Der Meister
874 / / 21.12.2007
Вообще, исключения не предназначены для использования их в качестве goto. Исключение - это самая настоящая ошибка, когда функция не может выполнить свои обязанности. Предотвращать ошибки надо бы с помощью средств управления потоком выполнения (if и иже с ними).
Смахивает на догму, конечно, да. Тем не менее, существует несколько причин так считать.
Во-первых, при таком подходе настоящие ошибки смешиваются с такими вот наведёнными. Во-вторых, бэкэнд (модель) от этого заметно тяжелеет, расплывается, описать его обязанности становится сложнее, приходится лезть в его потроха, для того чтобы понять, как обрабатывать такие ситуации. С локализацией вообще беда. В более общем случае, исключение даёт информацию об ошибке, но не говорит как её исправить.
4
27 апреля 2012 года
mike
3.7K / / 01.10.2002
Вопрос исключительно вкуса. Можно делать и так и так. Главное все сделать правильно. Я стараюсь использовать эксепшены для исключительных ситуация - необрабатываемые ошибки или ситуации которых просто не должно случится. Такие вещи как некорректно введенный пароль - это вообще не ошибка.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог