使用CakePHP 3和Crud插件强制JSON格式

时间:2015-10-06 12:21:10

标签: cakephp crud cakephp-3.0

我已按照How to build a CakePHP 3 REST API教程创建REST API。教程描述了使用扩展(json / xml)进行请求以设置响应格式的情况。使用了插件CRUD for CakePHP

我想强制JSON响应格式而不使用.json扩展名。我的请求收到了MissingRouteException。

我尝试了什么

Router::prefix('api', function ($routes) {
    //$routes->extensions(['json', 'xml']);
    $routes->resources('Cocktails');
});

#1

$this->RequestHandler->ext = 'json'到AppController :: beforeFilter()

#2

$this->RequestHandler->renderAs($this, 'json');到AppController :: beforeFilter()

但是这是尝试使用Template/Api/Coctails/json

中的模板

我希望它的行为与扩展名一样。

由于

1 个答案:

答案 0 :(得分:0)

使用a proper HTTP accept header Accept: application/json请求您的数据,RequestHandler应该接收它。

  

HTTP客户端使用Accept标头告诉服务器什么   他们接受的内容类型。然后服务器将发回一个   响应,其中包含一个告诉客户端的Content-Type标头   返回内容的内容类型实际上是什么。

     

但是,您可能已经注意到,HTTP请求也可以包含   内容类型标头。为什么?好吧,想想POST或PUT请求。   使用这些请求类型,客户端实际上发送了一堆   作为请求的一部分的数据到服务器,以及Content-Type标头   告诉服务器数据实际是什么(并因此确定如何   服务器将解析它。)

     

特别是对于HTML表单产生的典型POST请求   提交时,请求的Content-Type通常是   application / x-www-form-urlencoded或multipart / form-data。