Yii2 之响应内容协商行为类:ContentNegotiator

根据 Yii2 源码(yii\filters\ContentNegotiator),内容协商(ContentNegotiator)有返回 内容格式内容语言 两种,这里我们主要说一下 内容格式

我们常用的内容格式有

  • FORMAT_RAW
  • FORMAT_HTML
  • FORMAT_JSON
  • FORMAT_JSONP
  • FORMAT_XML

ContentNegotiator 内容协商是干嘛的?它可以分析 Request 的 header,然后指派所需的响应格式给客户端,不需要我们人工指定。
ContentNegotiator 既可以是应用级的,也可以是模块级的,还可以是控制器级的。

应用和模块级

在这两个级别层次,我们可以在 config 中这样来编写

'bootstrap' => [
    'log',
    [
        'class' => 'yii\filters\ContentNegotiator',
        'formats' => ['application/json' => yii\web\Response::FORMAT_JSON]
    ]
]
控制器级

在此级别层次,我们可以在控制器的 behaviors() 中来定义

public function behaviors(){
    return [
        'ContentNegotiator' => [
            'only'    => ['index', 'list'],
            'class'   => 'yii\filters\ContentNegotiator',
            'formats' => ['application/json'=>Response::FORMAT_JSON]
        ]
    ];
}

这样我们就可以来定义响应的格式。上面两例中我们只是定义了 JSON 这一种格式。在这种情况下,请求的 header 中不论设置的是什么格式,最后返回的都是 JSON
如果我们要设置多种相应格式,那么编写方法如下

public function behaviors(){
    return [
        'ContentNegotiator' => [
            'only' => ['index', 'list'],
            'class' => 'yii\filters\ContentNegotiator',
            'formats' => [
                'text/html'        => Response::FORMAT_HTML,
                'application/xml'  => Response::FORMAT_XML,
                'application/json' => Response::FORMAT_JSON,
            ]
        ]
    ];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值