2016-03-04 3 views
0

В настоящее время я пытаюсь разобрать multipart/form-data, который я отправляю через плагин Postman в Chrome. Тем не менее, я получаю следующий вывод:Parse 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, которая позаботится об этом?

Update
Я обнаружил, что это неправильно в моем коде, и кажется, что процесс маршрутизации каким-то образом опустошает пост массив рано. Когда я пытаюсь Postman со следующей конечной точкой http://vecto.app/api/pictures $ this-> request-> данные пустые. Однако, когда я пытаюсь получить доступ к конечной точке http://vecto.app/pictures, данные this 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 не предоставит методы для доступа к данным формы (которые [** это делает **] (http://book.cakephp.org/3.0/ ru/controllers/request-response.html # request-body-data)), почему вы даже думаете о том, чтобы попытаться разобрать его самостоятельно, когда PHP уже делает это и предоставляет его через '$ _POST' и' $ _FILES' ? – ndm

+0

$ this-> request-> данные пустые, когда я пытаюсь через Postman ($ this-> request-> is ('post') действительно выводит true). $ _POST и $ _FILES также пусты. Я предполагаю, что я делаю что-то неправильно, но странно, что $ this-> request-> input() фактически содержит фрагмент выше. – markvdlaan93

+0

Это должно сделать вас подозрительным. Скорее всего, ваш запрос недействителен/неверен. – ndm

ответ

0

я наконец нашел решение, которое было beforeFilter что опорожнил> request-> массив данных $ this-. Поэтому входной массив не был пустым, но массив данных был пустым. Это код, который вызвал проблему:

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); 
     }); 
    } 
}