Laravel获取选中条目对应id的input值传入控制器为空问题求解
问题原因分析
- 你当前用
<a>标签跳转的方式属于GET请求,只会携带你在route参数里定义的id,不会自动把同行quantity输入框的值传递到后端 - 所有行的input都使用同一个
name="quantity",没有和行ID绑定,就算提交也无法区分是哪一行的输入值 - 控制器中
$request->route('quantity')是用来读取路由占位参数的,你没有在路由中定义quantity占位符,自然拿不到值
修复方案
第一步:修改Blade模板,改用表单提交
给每行单独设置表单,同时把重复显示的session提示移到循环外:
@foreach($reagentcard as $r) <tr> <td>{{ $i++ }}</td> <td>{{ $r->casnumber }}</td> <td>{{ $r->name }}</td> <td>{{ $r->description }}</td> <td>{{ $r->classification }}</td> <td>{{ $r->manname }}</td> <td>{{ $r->incomedate}} </td> <td>{{ $r->expirationdate}} </td> <td>{{ $r->quantity }} </td> <td> <form action="{{ route('collect',['id' => $r->id]) }}" method="POST"> @csrf <input class="form-control" type="number" name="quantity"> </td> <td> <button type="submit"> Collect </button> </form> </td> </tr> @endforeach @if($message = Session::get('info')) <strong style="color:red">{{ $message }}</strong><br> @endif @if($message = Session::get('error')) <strong style="color:red">{{ $message }}</strong><br> @endif
第二步:修改控制器取值逻辑
用input()方法读取表单提交的参数即可:
public function collectReagent($id, Request $request) { $user_id = Auth::user()->id; $takedate = Carbon::now(); $reagentcard = ReagentCard::where('id',$id)->first(); $test = $request->input('quantity'); return view('test',compact('test', 'id')); }
可选方案:保留GET跳转逻辑
如果不想用表单POST提交,也可以通过JS监听每行quantity输入框的变化,动态修改对应Collect按钮的href,把quantity作为GET参数拼接到链接后,控制器用$request->get('quantity')读取即可。
内容的提问来源于stack exchange,提问作者JLukasz
相关产品推荐
相关产品推荐

