Проблемы с throw new Exception

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
darko
Сообщения: 8
Зарегистрирован: 2014.11.13, 12:32

Проблемы с throw new Exception

Сообщение darko » 2015.01.27, 01:02

В приложении необходимо производить сохранение связных данных и просчитывать бизнес логику, хотелось бы сделать проверку на возникновение ошибок. Делаю следующим образом:

Код: Выделить всё


$transaction = \Yii::$app->db->beginTransaction();                      
try {
     if ($model1->save()){
     
         // сохранение других данных если возникла ошибка
         throw new \Exception('My message');
         
         // просчет бизнес логики и запросы на другой сервер если возникла ошибка которая зависит от моих правил (например $a > $b) то
         throw new \Exception('My message');
     
     } else {
            throw new \Exception('My message');
     }
     $transaction->commit();
} catch (Exception $ex) {
       \Yii::$app->getSession()->setFlash('error', $ex->getMessage());
       // определенная логика которую необходимо выполнять только при возникновении ошибки
       $transaction->rollBack();
}
В каждом Exception('My message'); - сообщение которое я сам настраиваю и отображаю для пользователя в необходимом виде. В yii 1 данный подход работал.

Проблема сейчас в том, что при выполнении

Код: Выделить всё

throw new \Exception('My message');
yii2 останавливает выполнение скрипта и переводит на страницу своей стандартной ошибки.

Подскажите пожалуйста как это необходимо использовать? Есть ли возможность отключить это в конфигах (не отключая весь обработчик ошибок, нужно только

Код: Выделить всё

throw new \Exception('My message');
)?

dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Проблемы с throw new Exception

Сообщение dmeroff » 2015.01.27, 13:03

Посмотрите внимательно: вы бросаете исключение, которое находится в глобальном пространстве имен (об этом говорит слеш перед именем исключения), а ловите исключение в текущем пространстве имен (слеш отсутствует, поэтому полное имя исключения будет "текущий неймпспейс\Exception"). Вывод: добавьте обратный слеш перед именем ловимого исключения.

darko
Сообщения: 8
Зарегистрирован: 2014.11.13, 12:32

Re: Проблемы с throw new Exception

Сообщение darko » 2015.01.29, 23:01

Спасибо большое. Действительно это решило проблему, недостатки знаний проявляются.

Закрыто