Laravel Collective表单下拉框如何返回文本值而非索引值
解决Laravel Collective下拉框返回文本内容而非索引的问题
嘿,我来帮你搞定这个问题!目前你的下拉框返回索引值,是因为生成选项数组的方式不对,咱们一步步调整:
问题根源
你在控制器里用Status::pluck('server')的时候,生成的数组是数字索引作为键,服务器名称作为值,比如:
[0 => 'Server One', 1 => 'Server Two']
这就导致下拉框的每个<option>标签的value属性是数字索引,提交后自然拿到的是0、1这类值。
解决方案
1. 修改控制器的数组生成逻辑
把pluck方法改成同时指定键和值,让键和值都等于服务器名称:
public function createIncident(){ // 第一个参数是显示的文本,第二个参数是option的value值 $statuses = Status::pluck('server', 'server'); return view('createIncident', ['statuses' => $statuses]); }
这样生成的数组会变成:
['Server One' => 'Server One', 'Server Two' => 'Server Two']
2. 修正视图里的下拉框代码
你当前的Form::select语法有错误,多了一个闭合括号,而且不需要重复指定name属性(第一个参数已经是name了),修改后的代码如下:
{{ Form::label('server', 'Server:') }} <br/> {{ Form::select('server', $statuses, null, ['class' => 'form-control']) }}
这里第三个参数null表示默认不选中任何选项,如果需要默认选中某个值,可以把null换成对应的服务器名称。
效果验证
修改完成后,当用户选择下拉框中的选项并提交表单时,你在控制器里拿到的$request->server就是对应的服务器文本内容(比如'Server One'),而不是数字索引啦!
内容的提问来源于stack exchange,提问作者user7260078
相关产品推荐
相关产品推荐

