Laravel中解决验证错误后Select下拉框丢失选中值的问题
解决方案
1. 修正控制器语法错误
你的create方法最后一行数组闭合括号缺失,会导致代码报错,先修复:
public function create() { $nationalities = array('Italian','Brazilian','Spanish','Romanian'); return view('guest.create', ['nationalities'=>$nationalities]); }
2. 用Laravel旧输入功能保留选中状态
Laravel的validate方法验证失败时,会自动把用户提交的输入存入Session并重定向回表单页面。你只需在视图的<option>标签中,通过old()函数判断当前选项是否为用户之前选中的值,设置selected属性即可:
<div class="mb-3"> <label for="nationality" class="form-label fw-bold">Select<span class="required">*</span></label> <select class="form-select" id="nationality" name="nationality" aria-label="Floating label select example"> @foreach($nationalities as $nationality) <option value="{{$nationality}}" {{ old('nationality') == $nationality ? 'selected' : '' }}>{{$nationality}}</option> @endforeach </select> <!-- 可选:添加验证错误提示 --> @error('nationality') <div class="text-danger mt-1">{{ $message }}</div> @enderror </div>
原理说明
- 当
store方法验证失败时,Laravel自动重定向到create路由,同时把用户提交的nationality值存在Session中。 old('nationality')会从Session中取出之前提交的值,和当前循环的$nationality对比,匹配的话就给选项加上selected属性,保留用户之前的选择。- 添加
@error指令可在页面显示验证错误提示,优化用户体验。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

