
在 Laravel 表单验证失败后重定向时,普通输入框可通过 {{ old('field') }} 自动保留值,但 下拉框需为对应 显式添加 selected 属性才能恢复旧选中项。
在 laravel 表单验证失败后重定向时,普通输入框可通过 `{{ old('field') }}` 自动保留值,但 `
Laravel 的 old() 辅助函数本身不会自动作用于 ——它只返回上次请求中该字段的值,而 HTML 规范要求必须通过
✅ 正确做法是:遍历所有
以下是以你代码为基础的修正示例:
<div class="form-group">
<label class="block uppercase text-gray-700 text-xs font-bold">{{ __('Country') }}</label>
<select name="country" id="countrylist" class="form-control js-example-basic-single">
{{-- 假设 country-list.blade.php 中循环输出 option --}}
@foreach($countries as $code => $name)
<option value="{{ $code }}" old :>
{{ $name }}
</option>
@endforeach
</select>
</div>
⚠️ 关键说明:
- 删除
- old('country') 返回的是字符串(如 'US' 或 'CN'),需与每个
- 使用三元表达式 {{ old('country') == $code ? 'selected' : '' }} 实现条件渲染,确保仅匹配项被标记为选中;
- 若你的 country-list.blade.php 是纯 HTML 列表(无 PHP 循环),请将其重构为可传参的组件或直接内联循环逻辑,否则无法动态注入 selected 状态。
? 进阶建议:
- 对于带分组、禁用项或空占位符的下拉框,可统一处理:
<option value="" old null :> {{ __('Select a country') }} </option> - 使用 Laravel Collective 或 Livewire 可进一步简化状态管理,但在原生 Blade 中,显式 selected 是最可靠、零依赖的方案。
总结:下拉框“记住旧值”的本质不是设置










