Yii2响应不同格式请求的相同操作


Yii2 same action responding to different format requests

我正在尝试使用Yii2创建一个REST web应用程序,使用与应用程序前端相同的路由。我试图实现的是使用相同的控制器操作,默认情况下返回html,指定时返回xml或json,即GET http://example/controller/action将带我进入操作的视图,但当我在请求体中指定Accept: application/json时,控制器将呈现json数据。

这可以在RubyonRails中简单地完成:

respond_to do |format|
  format.html
  format.json {render.json: @model}
  format.xml {render.xml: @model}
end

如何在Yii2中实现这一点?

我尝试过QuickStart-RESTfulWebServices的教程,但它会使我的html视图变得无用,因为无论我向应用程序发送什么请求头,它都只会呈现XML数据。

关于响应格式:

默认情况下,RESTful API同时支持JSON和XML格式。为了支持新的格式,您应该在API控制器类中配置contentNegotiator过滤器的formats属性,如下所示:

use yii'web'Response;
public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_HTML;
    return $behaviors;
}

阅读有关响应格式的更多信息。