谁一开始就是大神?

response组件的format配置无效?[2.0]

在进行RESTful时,默认输出格式是xml,我在web.php配置

'response' => ['format' => 'json',],
'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                ['class' => 'yii\rest\UrlRule', 'controller' => ['player', 'custom']],
            ],
        ],
//    yii\web\Application类

public function handleRequest($request)
    {
        if (empty($this->catchAll)) {
            list ($route, $params) = $request->resolve();
        } else {
            $route = $this->catchAll[0];
            $params = array_splice($this->catchAll, 1);
        }
        try {
            Yii::trace("Route requested: '$route'", __METHOD__);
            $this->requestedRoute = $route;
            $result = $this->runAction($route, $params);
            if ($result instanceof Response) {
                return $result;
            } else {
                $response = $this->getResponse();
                //在这个地方打印$response,它的format属性还是默认值xml,没有改变?
                if ($result !== null) {
                    $response->data = $result;
                }

                return $response;
            }
        } catch (InvalidRouteException $e) {
            throw new NotFoundHttpException($e->getMessage(), $e->getCode(), $e);
        }
    }

为什么response对象的format属性还是xml

yii\rest\Controller 有定义了一个 behavior
contentNegotiator 这个 filter 会根据 客户端的 Accept 请求头, 重设 Responseformat 属性,yii\filters\ContentNegotiator
简单说就是 如果 Accept: application/xml, 则 format 会被设置为 xml,如果是 Accept: application/json 会被设置为 json,你可以在 web.php 里面设置一个默认值,请求的时候会根据 Accept 请求头自动重设 format 属性,你的应用可以自适应 xml,或者 json,或者,把这个 filter 去掉,应用一直使用 json 格式
你的问题可能就是,应用发送了 Accept: application/xml 请求头,发送 json 请求头就 ok 了

赞(0) 打赏
未经允许不得转载:菜鸟之家 » response组件的format配置无效?[2.0]

评论 抢沙发

登录

找回密码

注册