Задать вопрос

Как добавить свою страницу ошибки в Yii2 в REST приложение?

Здравствуйте, пытаюсь сейчас сделать шаблон для разработки REST API на Yii2, взял за основу шаблон advanced, хочу добавить во все контроллеры приложения api (так же ранее создал приложение api(на равне с backend, frontend, console)) фильтр ContentNegotiator, который форматировал бы все ответы в JSON строку, но дублировать в каждом контроллере метод behaviours с этим фильтром не хочется, по этому добавил ContentNegotiator в файл конфигурации, в свойство bootstrap, но теперь, если я пытаюсь обратиться к не существующей ссылку, в место того что бы перейти по пути site/error(ранее заготовил action на случай отсутствия url), но в место того что бы обратиться к site/error, он выкидывает что то свое, как это можно исправить? (ниже написал конфигурацию приложения, и прикрепил то что он выдает)

P.S У меня указан в конфигурационном файле компонент errorHandler, и если убрать из bootstrap ContentNegotiator, то вывод ошибки об отсутствие метода будет виден корректно

Код конфигурационного файла приложения api:
<?php

use yii\filters\ContentNegotiator;
use yii\web\Response;

$params = array_merge(
    require __DIR__ . '/../../common/config/params.php',
    require __DIR__ . '/../../common/config/params-local.php',
    require __DIR__ . '/params.php',
    require __DIR__ . '/params-local.php'
);

return [
    'id' => 'api',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'api\controllers',

    'bootstrap' => [
        'log',
        [
            'class' => ContentNegotiator::className(),
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
            ]
        ],
    ],
    
    'modules' => [],
    'components' => [
        'request' => [
            'parsers' => [
                'application/json' => 'yii\web\JsonParser'
            ]
        ],
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => false,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],

        'errorHandler' => [
            'errorAction' => 'site/error'
        ],

        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
                '<action:\w+>' => 'site/<action>',
                '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
            ],
        ],
    ],
    'params' => $params,
];


Вот то что выдает страница ошибки с включенным в bootstrap ContentNegotiator:
5e9381735f44f620904465.png
  • Вопрос задан
  • 70 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы