我使用Laravel 5.4和Collective \ Html包。
我尝试使用多个select元素构建一个表单并为其设置默认值。
我的form.blade.php文件
{!! Form::open(['url'=>'', 'method'=>'GET']) !!}
{!! Form::select(
"fruits[]",
[1=>"apple", 2=>"peer", 3=>"banana"],
[1, 3],
["multiple"=>true]
);
!!}
...
{!! Form::close() !!}
这段代码工作正常,我看到多行选择元素包含选定的第一行和第三行。
但是,如果我发送到此页面,则通过/form?fruits[]=2&fruits[]=3
预选值等网址获取GET数据不再可用。
据我了解,原因是Collective\Html\FormBuilder
级。从v5.2开始,下面的代码被添加到getValueAttribute()
方法(第1163-1166行,第5.4节):
$request = $this->request($name);
if (!is_null($request)) {
return $request;
}
此代码返回并覆盖Form :: select()中的默认值,并从请求中获取所需的值。这很好,但看起来开发人员在此次更新后没有完全控制select
元素。
在FormBuilder
课程中进行一些操作后,会将默认值发送到getSelectedValue()
方法,该方法会设置“{1}}选择' option
元素中所需select
的属性(第762-764行)
if (is_array($selected)) {
return in_array($value, $selected, true) ? 'selected' : null;
//--------------------------------------^-----------------
//-------------------------------problem origin-----------
}
此处in_array
在网址($value
)的默认值中查找选项值($selected
)。目前,url的值是字符串,而$value
是整数FormBuilder
,根本找不到默认选项。
如何在不编辑源类的情况下设置默认值?我应该覆盖HtmlServiceProvider
,HtmlBuilder
和FormBuilder
类只是为了删除true
参数吗?
也许有一些更原生的方法来设置默认值?
提前感谢您的回答。