Laravel validate方法验证失败无错误返回、表单不回填问题
问题修复方案
一、错误信息仅显示空红色div的修复
你当前的错误局部视图遍历方式错误,$errors是MessageBag实例,需要调用all()方法获取所有错误信息再遍历,修改partials/errors.blade.php代码如下:
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li> {{ $error }} </li> @endforeach </ul> </div> @endif
二、表单输入内容不回填的修复
Laravel验证失败后会将用户输入存入闪存,需要在表单元素中使用old()辅助函数读取闪存的旧值,按以下规则修改表单代码:
1. 文本输入框修改
给所有input标签添加value属性,值为old('对应字段名'),示例:
<!-- 产品名称输入框示例,其余输入框按相同规则修改 --> <input name="product_name" type="text" class="form-control" value="{{ old('product_name') }}">
2. 下拉选择框修改
给每个option标签添加selected判断,当old('对应字段名')等于当前选项值时选中该选项,示例:
性别下拉框修改:
<select class="form-control" name="gender"> <option value="Male" {{ old('gender') == 'Male' ? 'selected' : '' }}> Male </option> <option value="Female" {{ old('gender') == 'Female' ? 'selected' : '' }}> Female </option> <option value="Unisex" {{ old('gender') == 'Unisex' ? 'selected' : '' }}> Unisex </option> </select>
动态遍历的下拉框修改:
<!-- 产品分类下拉框示例,品牌下拉框按相同规则修改 --> <select class="form-control" name="category_name"> @foreach ($product_categories as $product_category) <option value="{{ $product_category->category_name }}" {{ old('category_name') == $product_category->category_name ? 'selected' : '' }}> {{ $product_category->category_name }} </option> @endforeach </select>
三、额外优化(非必须但建议修改)
你的表单中重复定义了CSRF令牌,既写了<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">又写了@csrf,保留@csrf即可,删除原生PHP输出的那行冗余代码。
修改完成后重新提交错误表单即可看到错误提示,且之前输入的内容会自动回填。
内容的提问来源于stack exchange,提问作者User 678976
相关产品推荐
相关产品推荐

