Сменить layout вывода об ошибке из контроллера

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Сменить layout вывода об ошибке из контроллера

Сообщение nickdenry »

Всем привет!

Подскажите, как из контроллера поменять шаблон вывода (layout или view) об ошибке. Т.е. чтобы вместо стандартной страницы вывести только текст об ошибке.

Сейчас делаю так,

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

Yii::$app->response->statusCode = 401;
Yii::$app->response->content = "Some error\n";
но это работает только для ситуаций, которые обрабатываю вручную. Стандартные ошибки валятся в консоль с кучей html, хотелось бы его убрать.
Ответственные программисты с высоким уровнем технического долга (c)
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Сменить layout вывода об ошибке из контроллера

Сообщение ElisDN »

Установить YII_DEBUG в false.
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Re: Сменить layout вывода об ошибке из контроллера

Сообщение nickdenry »

@ElisDN спасибо. Но ведь в этом случае так же будет присутствовать html. Мне хотелось бы совсем без него, т.к. информация обрабатывается в консоли.
Есть такая возможность, например свой "пустой "layout"?
Ответственные программисты с высоким уровнем технического долга (c)
YunX
Сообщения: 87
Зарегистрирован: 2011.07.06, 12:53

Re: Сменить layout вывода об ошибке из контроллера

Сообщение YunX »

nickdenry писал(а):@ElisDN спасибо. Но ведь в этом случае так же будет присутствовать html. Мне хотелось бы совсем без него, т.к. информация обрабатывается в консоли.
Есть такая возможность, например свой "пустой "layout"?
если в конфиге:

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

        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
в контроллере вместо стандартного:

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

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }
укажите свой класс (сделайте дочерний от базового Yii с изменением на необходимый вывод)

Сейчас, там такой вывод:

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

      if (Yii::$app->getRequest()->getIsAjax()) {
            return "$name: $message";
        } else {
            return $this->controller->render($this->view ?: $this->id, [
                'name' => $name,
                'message' => $message,
                'exception' => $exception,
            ]);
        }
соответственно, без отображения только при аякс-запросе.
Ответить