Возникла проблема с расширенными исключениями при использовании Yii 2

Я использую Yii 2 рамки, и он использует ряд расширенных исключений, и у меня возникла проблема с ними, где я бросил UserException но это закончилось тем, что было поймано базой Exception но я не уверен почему !?

Код:

try {

//........

if ($reader->count() > 0) {

if (!$already_active) {
//.....
} else {
throw new UserException('You have already activated your account; you may continue to login.');
}

}

} catch (\Exception $e) {

// User exception above is caught in here?

} catch (UserException $e) {

// Rethrow the exception
throw $e;

}

Не должен User Exception быть переданным и пойманным вторым catch?

1

Решение

От http://php.net/manual/en/language.exceptions.php

Когда генерируется исключение, код, следующий за оператором, не будет выполнен, и PHP попытается найти первый соответствующий блок catch.

Блок улова для Exception будет выполнен с Exception является родителем UserException и, следовательно, любой объект типа UserException также имеет тип Exception,

Поэтому вы должны рефакторинг вашего кода, чтобы сначала был блок catch для дочерних классов. В твоем случае UserException должен быть первым.

5

Другие решения

Если вы посмотрите на UserException класс вы можете увидеть:

class UserException extends Exception

Следовательно, Exception имеет более высокий приоритет.

Однако вы можете сделать только:

//if something's wrong
throw new \yii\base\UserException('You have already activated your account; you may continue to login.');
2

По вопросам рекламы [email protected]