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

Laravel 8项目Blade模板select下拉框提交后保留旧选中值问题

Laravel Blade下拉框old()不生效的常见排查方案

你写的select代码逻辑本身是正确的,不生效基本是后端配置或返回逻辑的问题,按以下顺序排查即可:

  • 第一检查控制器返回逻辑
    old()助手读取的是session里的闪存请求数据,只有请求数据被闪存到session里才能读到值:
    如果你用了Laravel自带的表单验证($request->validate()方法),验证失败时Laravel会自动闪存所有请求数据,不需要额外操作;如果你是手动处理表单逻辑,返回表单页的时候必须加withInput()方法闪存数据:
    // 错误写法:直接返回视图或重定向没有传input
    return view('form-page');
    return back();
    // 正确写法:重定向回表单页同时闪存请求数据
    return back()->withInput();
    
  • 第二检查session配置
    如果你的.env文件里SESSION_DRIVER设为了array,session数据不会持久存储,闪存数据刷新后就会丢失。改成持久化驱动即可:
    # 改前
    SESSION_DRIVER=array
    # 改后
    SESSION_DRIVER=file
    
    修改后执行php artisan config:clear清空配置缓存生效。
  • 第三补充默认选项的判断
    你当前第一个默认选项没有加old判断,如果用户提交时未做选择,提交的值为select,不会自动切回默认选中状态,可以补充对应逻辑:
    <option value="select" {{ old('company') == 'select' ? 'selected' : '' }}>Select Type</option>
    

优化写法参考

选项较多的时候可以用循环简化代码,避免重复写判断逻辑:

<select class="form-control" name="company">
    <option value="select" {{ old('company') == 'select' ? 'selected' : '' }}>Select Type</option>
    @foreach(['Apple', 'Google', 'Mi', 'Samsung'] as $item)
        <option value="{{ $item }}" {{ old('company') == $item ? 'selected' : '' }}>{{ $item }}</option>
    @endforeach
</select>

内容的提问来源于stack exchange,提问作者Siddharth Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:39:01