Driver86
@Driver86
Немодератор toster.ru

В beforeAction исключение NotFoundHttpException отображается как ошибка, а не как страница 404-ошибки. Почему?

В beforeAction исключение NotFoundHttpException отображается как ошибка, а не как страница 404-ошибки. Почему?
Как нормально отобразить?
  • Вопрос задан
  • 407 просмотров
Решения вопроса 2
А вы точно верно вызываете исключения? Код ниже прекрасно работает и возвращает 404

<?php

namespace backend\controllers;

use Yii;
use yii\web\Controller;
use yii\web\NotFoundHttpException;

class SiteController extends Controller
{

    public function beforeAction($action)
    {
        throw new NotFoundHttpException();
    }
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
Сложно сказать в чем конкретно у Вас проблема т.к. Вы не привели ни строки кода, но скорее всего проблема в том что Вы кидаете исключение в контроллере, экшен которого, используется для отображения ошибки в ErrorHandler (параметр errorAction в файле конфигурации). Соответственно когда Вы кидайте в beforeAction исключение происходит следующая ситуация:
1. ErrorHandler ловит исключение и передает его тому же контроллеру для отображения страницы ошибки
2. Отрабатывается beforeAction, который несмотря на уже имеющиеся исключение генерирует новое
и эти два пункта повторяются по кругу ... В итоге Yii не может обработать эту ситуацию... Для решения проблемы достаточно сделать проверку на наличие в ErrorHandler исключения, например:
if (Yii::$app->errorHandler->exception === null) {
	throw new NotFoundHttpException();
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы