Страница 1 из 1

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

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

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


$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');
)?

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

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

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

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