
Laravel 的 old() 辅助函数可自动回填文本输入框等表单字段,但对 下拉框无效——因其需显式为对应 添加 selected 属性,而非依赖 select 标签的 value 属性。
laravel 的 `old()` 辅助函数可自动回填文本输入框等表单字段,但对 `
在 Laravel 表单验证失败后重定向时,old('field_name') 能自然恢复 、
因此,正确做法是:遍历所有
以下是修复你代码的关键修改(以 country 字段为例):
<div class="form-group">
<label class="block uppercase text-gray-700 text-xs font-bold col-form-label">
{{ __('Country') }}
</label>
<select name="country" id="countrylist" class="form-control js-example-basic-single">
@include('layouts.country-list')
</select>
</div>
⚠️ 注意:你当前在
然后,在 resources/views/layouts/country-list.blade.php 中,确保每个
<!-- resources/views/layouts/country-list.blade.php -->
<option value="">-- Select a Country --</option>
@foreach($countries as $code => $name)
<option value="{{ $code }}" old :>
{{ $name }}
</option>
@endforeach
✅ 若你在控制器中传递了 $countries 数组(如 compact('countries')),上述写法即可生效;
✅ 若 country-list 是纯静态 HTML(无 PHP 循环),则需将其重构为动态模板,或直接将循环逻辑内联到主表单中。
补充说明:
- old('country') 返回字符串(如 'US'),因此比较必须用 ==(非严格相等),兼容空字符串与 null;
- 若下拉选项来自数据库或配置文件,建议统一通过 @foreach 渲染,避免硬编码;
- 使用 Form::select()(Laravel Collective)等扩展包虽可简化,但原生 Blade 方案更轻量、可控性更强,且无需额外依赖。
总结:下拉框“记不住”旧值,根本原因在于语义误解——










