Неправильное получение данных составных форм с помощью PHP.

#javascript #php #reactjs #multipartform-data

Вопрос:

У меня большая проблема с получением данных из запроса составной формы, отправленного моим интерфейсом ReactJS в PHP api, обработанный с помощью Klein. Я просто попытался отправить с помощью Javascript этот запрос на извлечение

  const data = new FormData();
    data.append('sourceId', sourceId);
    data.append('customerId', customerId);
    const resp = await fetch(URL_CREATE_DOC, {
      method: 'POST',
      body: data,
      headers: {
        'Content-Type': 'multipart/form-data; boundary=stackoverflowrocks',
      }
 

а затем получить в моем PHP Api с помощью этого

 var_dump($request->files()->all());
 

но нет никаких данных ! В заголовке я вижу, что данные хорошо отправляются спереди, и когда я делаю var_dump($request->server ()), я вижу, что содержимое изменяется, если я отправляю файлы. Я думаю, что я что-то делаю не очень хорошо, но как я могу получить данные из составного запроса ?

Комментарии:

1. FormData автоматически создает само случайное граничное значение. Пытаясь указать boundary=stackoverflowrocks в Content-Type заголовке, вы , вероятно, все здесь портите — в заголовке говорится, что граница, которую должен искать анализатор тела, была stackoverflowrocks , но на самом деле, скорее всего, это совершенно другая. Не устанавливайте заголовок типа содержимого самостоятельно-fetch и FormData способны сами это выяснить. muffinman.io/blog/…

2. Большое спасибо @Cbroe ! Это была моя проблема, я просто удалил Content-Type строку, и это сработало ! Два дня на это, и вы решили эту проблему 🙂

Ответ №1:

Согласно readme:

 $request->
    id($hash = true)                    // Get a unique ID for the request
    paramsGet()                         // Return the GET parameter collection
    paramsPost()                        // Return the POST parameter collection
    paramsNamed()                       // Return the named parameter collection
    cookies()                           // Return the cookies collection
    server()                            // Return the server collection
    headers()                           // Return the headers collection
    files()                             // Return the files collection
    body()                              // Get the request body
    params()                            // Return all parameters
    params($mask = null)                // Return all parameters that match the mask array - extract() friendly
    param($key, $default = null)        // Get a request parameter (get, post, named)
 

files() предназначено исключительно для загруженных файлов, которых у вас, похоже , нет; ваши значения можно найти в данных POST, что означает, что любое из paramsPost() params() них или param($name) было бы правильным.

Комментарии:

1. Спасибо @Duroth за ваш ответ. Это моя вина, я поставил не ту строку в своем выпуске, на самом деле, $request->files()->all() это только для того, чтобы получить файлы. Я использовал это, когда пытался отправить файлы. Даже когда я использовал paramsPost() или params() , он не работал, он показывал пустой массив. @CBroe принес мне решение.