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

Laravel单选按钮选No时控制器接收值为null问题求助

问题根源

你页面里的Yes/No单选组和职业下拉框使用了相同的name="user_profession"属性,浏览器提交表单时,同名字段会按DOM加载顺序取最后一个出现的有效值:

  • 选Yes时下拉框显示且有选中值,刚好覆盖了前面未设value的Yes单选的空值,所以控制器能正常拿到职业值
  • 选No时下拉框隐藏无有效值,空值覆盖了前面单选的Others值,所以控制器拿到null
    另外你代码里的Yes单选按钮未设置value属性,本身选中后提交的就是空值,也是问题诱因。
修复步骤

1. 修正Blade模板字段配置

修改_kyc2模板里的两个属性:

  • 给Yes单选按钮补充value值
  • 修改下拉框的name属性,避免和单选字段重名
<!-- Yes单选按钮补充value -->
<input id="yesCheck" class="form-check-input" type="radio" name="user_profession" value="Yes" onclick="findselected()"
    @if (old('user_profession') ? old('user_profession') : $user->user_profession === 'Yes') checked @endif>

<!-- 下拉框修改name为profession_select -->
<select class="form-select" name="profession_select" id="inputtext">
    @foreach ($professions as $profession)
        <option value="{{ $profession->name }}">{{ $profession->name }}</option>
    @endforeach
</select>

2. 调整控制器逻辑

直接在控制器内根据单选值判断最终要存储的内容,逻辑更稳定无需改前端JS:

public function save_kyc_step_two(Request $request)
{
    // 修正冲突的验证规则,选Yes时要求下拉框必须选值
    $request->validate([
        'user_profession' => 'required',
        'profession_select' => 'required_if:user_profession,Yes'
    ]);

    $user = $request->user();
    // 选Yes就取下拉框值,选No就直接取常量
    $user->user_profession = $request->user_profession === 'Yes' 
        ? $request->profession_select 
        : \App\Helpers\Constant::IS_NOT_PROFESSIONAL;

    $user->save();

    session()->flash('alert-success', "Identification Details Saved");
    return redirect()->route('borrower.kyc_step_three');
}

内容的提问来源于stack exchange,提问作者Keane Setiawan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:21:02