Laravel 8提交表单报错:name须为字符串、image必填
错误原因
两个报错本质是同一个前端笔误引发的连锁问题,核心错误出在表单视图的图片上传控件上。
查看你的视图代码,图片上传输入框写法如下:
<div class="mb-3"> <label>Image</label> <input type="file" name="name" class="form-control"> </div>
这里文件输入框的name属性值错写成了name,和验证规则里定义的image字段名完全不匹配,直接触发两个报错:
- 后端验证阶段接收不到名为
image的上传文件,触发The image field is required(image字段为必填项)错误 - 你选择的上传文件被绑定到了
name字段上,而name字段的验证规则要求传入字符串类型,实际拿到的是文件上传实例,因此触发The name must be a string(name字段必须为字符串)错误
修复方法
- 先修正前端笔误,把图片上传控件的
name属性改成image,和验证规则保持一致:
<input type="file" name="image" class="form-control">
改完这一处,你当前遇到的两个验证报错就会直接消失。
- 建议顺带修复代码里几个隐蔽的逻辑bug,避免后续出现功能异常:
- 上传文件名拼接缺少扩展名分隔符:你当前写的
$filename = date('YmdHi').$file->getClientOriginalExtension();生成的文件名会是202405201430png这种没有点分隔的格式,要改成$filename = date('YmdHi').'.'.$file->getClientOriginalExtension(); - 图片路径没有赋值给模型:你在控制器里处理完上传文件后,只把文件名存到了
$data数组,没有赋值给$category->image,会导致分类数据保存时图片字段为空,需要在文件上传处理逻辑里加上$category->image = $filename; - 状态赋值行末尾多写了一个分号,属于冗余语法,可以删掉多余的分号
- 视图里的标题标签不匹配:
<h4 class="mt-4"> Add Category</h1>是h4开头、h1闭合,属于HTML语法错误,建议改成对应的</h4>闭合标签,避免页面样式异常。
- 上传文件名拼接缺少扩展名分隔符:你当前写的
内容的提问来源于stack exchange,提问作者Belle
相关产品推荐
相关产品推荐

