Laravel 5.8表单验证报错‘给定数据无效’,求排查问题
Laravel 5.8表单验证返回"The given data was invalid."问题排查
以下是几个大概率导致验证失败的原因及解决办法:
文件字段缺少基础验证规则
Laravel 5.8中,针对文件上传的mimes规则不能单独使用,必须搭配file(通用文件)或image(图片专用)规则,否则框架无法识别这是文件类型字段,直接判定验证不通过。
修改验证规则:video字段改为:nullable|file|mimes:mp4video_thumb字段改为:required|image|mimes:jpg,png,jpeg(用image规则还能额外验证文件是否为有效图片)
表单未设置正确的enctype
包含文件上传的表单必须添加enctype="multipart/form-data"属性,否则后端根本接收不到上传的文件,导致video_thumb这个必填文件字段验证失败。
确保表单标签类似:<form method="POST" action="/your-upload-path" enctype="multipart/form-data"> <!-- 表单内容 --> </form>未查看具体错误细节
当前代码里dd($e)只能看到异常对象,没法知道到底哪个字段、哪条规则没通过。可以捕获ValidationException来输出具体错误:catch(\Illuminate\Validation\ValidationException $e) { dd($e->errors()); // 输出字段对应的错误数组,精准定位问题 }available_download字段的隐式验证问题
如果这个字段是复选框或布尔类型,仅用nullable可能不够。比如前端传on(复选框默认值)时,框架可能会因为类型不匹配触发隐式验证失败,建议添加boolean规则:nullable|boolean。
修改后的完整控制器代码示例:
public function doTheUpload(Request $request) { try{ $request->validate([ 'video' => 'nullable|file|mimes:mp4', 'video_thumb' => 'required|image|mimes:jpg,png,jpeg', 'video_name' => 'required', 'video_desc' => 'nullable', 'available_download' => 'nullable|boolean', ],[ 'video.mimes' => 'video file format is not valid', 'video_thumb.required' => 'uploading video thumbnail is required', 'video_name.required' => 'you must enter name of video', 'video_thumb.mimes' => 'image thumbnail file format is not valid', ]); // 执行上传逻辑 }catch(\Illuminate\Validation\ValidationException $e){ dd($e->errors()); // 查看具体错误信息 }catch(\Exception $e){ dd($e); } }
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

