我有一组从请求发送的文件,表单元素有
"enctype="multipart/form-data"
也 product_logo[]
是处理该文件的元素。
问题是当我尝试在产品徽标内循环时。当我尝试调试
$file
时,它返回空,或者当我也使用 hasFile()
函数时,它返回 false。
// Loop through product_logo
foreach ($validated['product_logo'] as $key => $value) {
dd($value, $validated['product_logo'], $request->hasFile($value));
$file = $request->file($value);
$path = $file->store('wl/product_logo', 'public');
$wlConfigImage = WlConfigImage::create([
'wl_config_id' => WlConfig::where('user_id', Auth::user()->id)->first()->id,
'name' => $value->getClientOriginalName(),
'path' => $path,
]);
WlService::where('user_id', Auth::user()->id)
->where('accelerate_service_id', $key)
->update([
'wl_config_images_id' => $wlConfigImage->id
]);
}
查看
dd()
信息,您不需要使用 $request->file()
,因为您已经拥有 UploadedFile
的实例。在这种情况下,$request->file()
只会返回相同的结果。
正如评论中提到的,
hasFile()
(和file()
)接受输入的名称,而不是文件本身。传递 UploadedFile
的实例将不起作用,因为它只是在底层使用 data_get()
。
这就是您需要做的全部。
foreach ($validated['product_logo'] as $key => $file) {
$path = $file->store('wl/product_logo', 'public');
$wlConfigImage = WlConfigImage::create([
'wl_config_id' => WlConfig::where('user_id', Auth::id())->first()->id,
'name' => $file->getClientOriginalName(),
'path' => $path,
]);
WlService::where('user_id', Auth::user()->id)
->where('accelerate_service_id', $key)
->update([
'wl_config_images_id' => $wlConfigImage->id,
]);
}
仅用于演示目的,如果您确实想使用
hasFile()
,您会执行以下操作:
foreach ($validated['product_logo'] as $key => $file) {
dd($request->hasFile('product_logo.'.$key));
}