如何为Laravel控制器代码实现数据验证?当前验证无响应
解决Laravel验证后dd无反应的问题
先确认验证规则是否正确生成
在执行$request->validate($nilai);之前,先打印$nilai数组,验证规则是否符合预期:dd($nilai); // 放在$request->validate代码上方如果
$nilai是空数组,说明Profilbidangkajian::all()没有查询到数据,或是关联的matakuliah不存在/无nama字段,此时验证会直接通过,但dd($validated)只会输出空数组。注意验证失败的自动重定向行为
Laravel的validate()方法在验证失败时,会自动重定向回请求来源页面,并把错误信息存入Session,这种情况下代码根本不会走到dd($validated)这一步。- 若是表单提交场景,可在前端页面添加错误提示代码查看验证错误:
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif - 若是AJAX/API请求,
validate()会返回JSON格式的错误响应,需在浏览器开发者工具的Network标签中查看请求的响应内容。
- 若是表单提交场景,可在前端页面添加错误提示代码查看验证错误:
手动捕获验证异常,强制查看错误
若想跳过自动重定向,直接查看验证错误,可手动使用Validator类实现验证:use Illuminate\Support\Facades\Validator; public function perengkingan(Request $request) { $kriteriaPenilaian = Profilbidangkajian::all(); $nilai = []; foreach ($kriteriaPenilaian as $value) { // 先判断关联是否存在,避免报错 if ($value->matakuliah) { $nilai[$value->matakuliah->nama] = 'required'; } } $validator = Validator::make($request->all(), $nilai); if ($validator->fails()) { dd($validator->errors()); // 直接打印错误信息 // 也可根据需求返回重定向:return redirect()->back()->withErrors($validator)->withInput(); } $validated = $validator->validated(); dd($validated); }检查请求字段名是否匹配
确认前端表单输入框的name属性,与$nilai数组中的键名完全一致(包括大小写、空格等细节),否则验证会判定该字段未提交,触发必填规则错误。
内容的提问来源于stack exchange,提问作者GreatLeaf__
相关产品推荐
相关产品推荐

