2016-03-04 17 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); 
     }); 
    } 
}