Структура запроса:
Запрос отправляется в виде данных формы с помощью Postman. Вот структура:
- skill_type (строка): требуется
- skill_description (строка): требуется
- портфели (массив): необязательно
- описание (строка): необязательно
- файлы (массив загруженных файлов): необязательно
Код: Выделить всё
public function rules(): array
{
return [
'skill_type' => 'required|string|max:255',
'skill_description' => 'required|string|max:2000',
'portfolios' => 'nullable|array',
'portfolios.*.files' => 'nullable|array',
'portfolios.*.files.*' => 'file|mimes:jpg,jpeg,png,pdf|max:2048',
];
}
Код: Выделить всё
public function register(StoreWorkerRequest $request): JsonResponse
{
$validatedData = $request->validated();
return response()->json([
'all_inputs' => $request->all(),
'file_inputs' => $request->file('portfolios'),
]);
}
- portfolios[0][files][] для первого файла в первом портфолио и
- portfolios[1][files][] для первого файла во втором портфолио .
Несмотря на правильное прикрепление файлов в Postman, ответ file_inputs в Laravel показывает пустые массивы для файлов. Ответ выглядит следующим образом:
Код: Выделить всё
{
"all_inputs": {
"skill_type": "Compete",
"skill_description": "Insane designer",
"portfolios": [
{
"description": "Portfolio 1 description",
"files": [{}]
},
{
"description": "Portfolio 2 description",
"files": [{}]
}
]
},
"file_inputs": [
{
"files": [{}]
},
{
"files": [{}]
}
]
}
- Убедился, что заголовок Content-Type не установлено вручную в Postman (Postman автоматически устанавливает значение multipart/form-data).
- Проверено, что файлы правильно прикрепляются в разделе данных формы Postman.
- Использованы $request->all() и $request->file(). для проверки входных данных в Laravel.
Как предложил @C3roe, я также сбросил $_FILE и получил массив файлов, выбранных в почтальоне, как:< /li>
Код: Выделить всё
"file": {
"portfolios": {
"name": [
{
"files": [
"c-sm.jpg"
]
},
{
"files": [
"c-sm.jpg"
]
}
],
"full_path": [
{
"files": [
"c-sm.jpg"
]
},
{
"files": [
"c-sm.jpg"
]
}
],
"type": [
{
"files": [
"image/jpeg"
]
},
{
"files": [
"image/jpeg"
]
}
],
"tmp_name": [
{
"files": [
"C:\\Users\\...\\AppData\\Local\\Temp\\phpE252.tmp"
]
},
{
"files": [
"C:\\Users\\...\\AppData\\Local\\Temp\\phpE253.tmp"
]
}
],
"error": [
{
"files": [
0
]
},
{
"files": [
0
]
}
],
"size": [
{
"files": [
2701
]
},
{
"files": [
2701
]
}
]
}
},
Код: Выделить всё
'portfolios' => 'nullable|array',
'portfolios.*.files' => 'nullable|array',
'portfolios.*.files.*' => 'file|mimes:jpg,jpeg,png,pdf|max:2048',
Вопрос: Почему файлы в моем вложенном запросе данных формы не обнаруживаются Laravel и как я могу это исправить, чтобы правильно обрабатывать загрузку файлов с помощью вложенного массива структура?
Подробнее здесь: https://stackoverflow.com/questions/792 ... in-request