Laravel提交POST表单验证时返回302 found状态码问题求助
问题排查与解决方案
一、302无错误提示的原因和修复
Laravel 内置的validate()方法验证失败时,默认会触发302重定向到请求来源页,同时将验证错误信息存入session的$errors全局变量中,你当前没有在Blade模板中输出错误信息,所以看不到有效提示。
- 修复方法:在表单Blade页面添加错误输出代码,示例如下:
{{-- 输出全部错误提示 --}} @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif {{-- 也可以给单个字段单独配置提示,放在对应input下方即可 --}} @error('item_name') <div class="text-danger">{{ $message }}</div> @enderror @error('item_price') <div class="text-danger">{{ $message }}</div> @enderror
二、代码中的其他致命错误修复
1. 验证返回值访问方式错误
$rq->validate()验证通过后返回的是数组,不是对象,不能用->访问属性,必须用数组下标:
// 错误写法 $validated->item_price // 正确写法 $validated['item_price']
2. 字段名不匹配错误
你的验证规则里不存在item_title字段,写入数据库时调用$validated->item_title会直接抛出异常,按照你的表单字段修正写入逻辑:
UsrsItem::create([ 'item_name' => $validated['item_name'], 'item_price' => $validated['item_price'], ]);
3. 冗余规则清理
验证规则里的item_desc字段没有对应表单输入,虽然是非必填规则不会影响验证,不需要可以直接删除避免混淆。
三、可选:接口场景返回JSON错误
如果当前请求是接口调用不需要页面重定向,可以改用验证门面自定义失败响应:
use Illuminate\Support\Facades\Validator; public function new_item(Request $rq){ $validator = Validator::make($rq->all(), [ 'item_name' => 'required|string|min:4|max:90', 'item_price' => 'required|integer|min:4' ]); if ($validator->fails()) { return response()->json([ 'code' => 400, 'msg' => '参数错误', 'errors' => $validator->errors() ], 400); } $validated = $validator->validated(); UsrsItem::create([ 'item_name' => $validated['item_name'], 'item_price' => $validated['item_price'], ]); // 补充成功后的响应逻辑即可 }
内容的提问来源于stack exchange,提问作者k_fc_
相关产品推荐
相关产品推荐

