#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 принес мне решение.