You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:31:20