Laravel:使用 file() 时数组内的文件变空

问题描述 投票:0回答:1

我有一组从请求发送的文件,表单元素有

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

调试结果 enter image description here

php laravel file-upload
1个回答
0
投票

查看

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));
}
© www.soinside.com 2019 - 2024. All rights reserved.