Laravel批量上传:如何获取验证失败文件的文件名?
问题分析与解决
你的代码存在两个核心问题,导致无法替换错误消息里的字段标识为文件名:
- 错误的消息数组结构:你把
$validationArray包裹进了另一个数组$messages = [$validationArray];,形成了二维数组,Laravel无法正确解析对应的字段规则消息,因此默认显示字段名uploads.0。 - 缺少
mimes规则的自定义消息:你只给image规则定义了带文件名的提示,mimes规则仍使用默认模板,所以会继续出现uploads.0的字样。
修正后的代码
$messages = []; if($request->hasfile('uploads')){ foreach ($request->file('uploads') as $key => $file) { $filename = $file->getClientOriginalName(); // 为image规则绑定带文件名的错误消息 $messages["uploads.$key.image"] = "The $filename must be an image."; // 为mimes规则绑定带文件名的错误消息 $messages["uploads.$key.mimes"] = "The $filename must be a file of type: jpg, jpeg, png."; } } $request->validate([ 'uploads' => 'required|array', 'uploads.*' => 'image|mimes:jpg,jpeg,png' ], $messages);
修正说明
- 直接将每个字段规则的消息存入
$messages一维数组,避免嵌套结构,确保Laravel能正确匹配字段与对应规则的自定义提示。 - 同时为
mimes规则添加自定义消息,让两个验证规则的错误提示都能显示对应的文件名,而非系统默认的字段标识。
内容的提问来源于stack exchange,提问作者Baby Babai
相关产品推荐
相关产品推荐

