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
相关产品推荐
相关产品推荐

