Yii2休息控制器的AccessControl过滤器重定向到登录页面

arf*_*ame 1 rest access-control yii2

ApiController:

<?php
namespace frontend\controllers;

use Yii;
use yii\rest\Controller;
use yii\filters\AccessControl;

/**
 * API
 */

class ApiController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }

    public function actionTest()
    {
        echo 'here';
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中打开/ api/test时AccessControl重定向到登录页面.如何用403状态代码显示json格式错误?

谢谢!

Ars*_*sey 8

你应该添加denyCallback来改变这种行为:

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
            'denyCallback' => function ($rule, $action) {
                throw new \yii\web\ForbiddenHttpException('You are not allowed to access this page');
            }
        ],
    ];
}
Run Code Online (Sandbox Code Playgroud)