Запрос Yii2 не перенаправляет на actionError - PullRequest
1 голос
/ 19 апреля 2019

Я настроил мою конфигурацию для обработки ошибок в функции ошибок ApiController. Например, когда я захожу на страницу, которая не существует, она отображает: message => page not found как определено в действии. Однако, когда я делаю неавторизованный запрос, сайт не отображает сообщение, определенное в действии, а вместо этого возвращается следующий ответ:

{
    "name": "Unauthorized",
    "message": "Your request was made with invalid credentials.",
    "code": 0,
    "status": 401,
    "type": "yii\\web\\UnauthorizedHttpException"
}

Что мне нужно изменить, чтобы отправить ответ, как определено в actionError?

апи / конфигурации / main.php:

'components' => [        
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-api', 'httpOnly' => true],
        ],                
        'errorHandler' => [
            'errorAction' => 'api/error',
        ],
        ...

апи / контроллеры / ApiController.php:

<?php

namespace api\controllers;

use Yii;
use yii\web\BadRequestHttpException;
use yii\web\Controller;
use yii\web\Response;

class ApiController extends Controller
{
    /**
     * @param $action
     * @return bool
     * @throws BadRequestHttpException
     */
    public function beforeAction($action)
    {
        Yii::$app->response->format = Response::FORMAT_JSON;
        $this->enableCsrfValidation = false;

        return parent::beforeAction($action);
    }

    public function afterAction($action, $result)
    {
        $session = Yii::$app->getSession();

        if($session->getIsActive()) {
            $session->destroy();
        }

        return parent::afterAction($action, $result);
    }

    /**
     * @return array
     */
    public function actionError()
    {        
        $exception = Yii::$app->errorHandler->exception;
        Yii::$app->response->format = Response::FORMAT_JSON;
        Yii::$app->response->statusCode = $exception->statusCode;

        switch($exception->statusCode)
        {
            case 401:
                return [
                    'error' => 'Unauthorized',
                    'message' => $exception->getMessage()
                ];
            case 404:
                return [
                    'message' => 'Page not found'
                ];
            default:
                {
                    return [
                        'error' => 'Something went wrong',
                        'message' => $exception->getMessage()
                    ];
                }
        }
    }
}
...