2016-03-04 62 views
0

我目前正试图解析通过Postman插件在Chrome中发送的multipart/form-data。不过,我得到以下输出:解析多部分/表单数据cakephp 3

'------WebKitFormBoundarymsXhoqlRBbTbsZFb 
Content-Disposition: form-data; name="album_id" 

2 
------WebKitFormBoundarymsXhoqlRBbTbsZFb 
Content-Disposition: form-data; name="description" 

haiahaahahahdaisdhisadhisadihsdhiiahsd 
------WebKitFormBoundarymsXhoqlRBbTbsZFb 
Content-Disposition: form-data; name="favorite" 

true 
------WebKitFormBoundarymsXhoqlRBbTbsZFb 
Content-Disposition: form-data; name="uploadfile"; filename="test2.txt" 
Content-Type: text/plain 

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
------WebKitFormBoundarymsXhoqlRBbTbsZFb 
Content-Disposition: form-data; name="uploadfile"; filename="test.txt" 
Content-Type: text/plain 

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 
proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
------WebKitFormBoundarymsXhoqlRBbTbsZFb-- 
' 

此输出做我得到的,当我尝试调试$this->request->input()。当我尝试$this->request->input('json_decode')时,我得到一个空数组,所以我假定数据的格式不正确(只是一个字符串)。在我编写自己的算法之前,我想确保我不会用这个算法重新发明轮子。我做错了什么?或者,如果没有,是否存在一些CakePHP 3功能来处理这个问题?

更新
我发现什么是错在我的代码,它似乎像路由过程莫名其妙清空后阵列提前。当我尝试使用以下端点的邮递员http://vecto.app/api/pictures $ this-> request-> data是空的。但是,当我尝试访问端点http://vecto.app/pictures时,$ this-> request->数据充满了信息。有谁知道什么是错用下面的路由设置:

Router::prefix('api', function ($routes) { 
    $routes->extensions(['json', 'xml']); 
    $routes->resources('Users'); 
    $routes->resources('Pictures'); 
    // We connect the /register action so we can simply extend the CRUD Plugin add() method 
    // and benefit of already available logic like validation and response codes instead of having to reinvent the wheel. 
    Router::connect('/api/users/register', ['controller' => 'Users', 'action' => 'add', 'prefix' => 'api']); 
    $routes->fallbacks('InflectedRoute'); 
}); 
+0

即使CakePHP不会提供访问表单数据的方法([** it does **](http://book.cakephp.org/3.0/ en/controllers/request-response.html#request-body-data)),为什么你甚至想自己解析它,当PHP已经做到了,并通过'$ _POST'和'$ _FILES'公开它? – ndm

+0

$ this-> request-> data当我尝试通过邮递员时($ this-> request-> is('post')实际输出true),它是空的。 $ _POST和$ _FILES也是空的。我假设我做错了,但奇怪的是$ this-> request-> input()实际上包含了上面的代码片段。 – markvdlaan93

+0

这应该会让你怀疑。很有可能您的请求无效/格式错误。 – ndm

回答

0

我终于发现这是掏空$这个 - >请求 - >数据数组的beforeFilter的解决方案。因此,输入数组不是空的,但数据数组是空的。这是导致问题的代码:

public function beforeFilter(Event $event) { 
    if ($this->request->is('post')) { 
     $data = $this->request; 
     $this->request->data = $this->request->input(function ($data) { 
      return json_decode($data, true); 
     }); 
    } 
}