Я не могу поймать исключение в рамках Yii

1

Я использую структуру Yii и написал код ниже. Когда нет записи для определенного идентификатора, она дает Error: Call to a member function delete() on a non-object который является yii\base\ErrorException указанным в режиме отладки. Проблема в том, что я не могу уловить это исключение, несмотря на включение yii\base\ErrorException и указать его catch block. В чем проблема?

            use yii\base\ErrorException;

            try {
                $model = BranchUser::findOne($_GET['id']);
                $model->delete();
                return $this->redirect(['index']);
            } catch (ErrorException $e) {
                return $this->redirect(['site/error']);
                // Error, rollback transaction
                throw $e;
                // print_r($model->getErrors());

            }
Теги:
yii2

1 ответ

3
Лучший ответ

Это фатальная ошибка, и из нее невозможно восстановить.

Вы должны проверить, что $model является чем-то иным, чем null прежде чем пытаться его использовать.

if ($model === null) {
    return $this->redirect(['site/error']);
}

Такие ошибки увлекательны в PHP 7.0, так что хорошо.

  • 0
    Мне нравится ваш ответ, но если вопрос был: «Как можно сгенерировать исключение, если findOne ничего не находит?»
  • 0
    @IvanButtinoni Тогда вы бросаете исключение вместо возвращения. :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню