Laravel 5.4中的多个Form :: select中的默认值

时间:2017-06-20 06:28:57

标签: php forms laravel-5.2 laravel-5.3 laravel-5.4

我使用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,根本找不到默认选项。

如何在不编辑源类的情况下设置默认值?我应该覆盖HtmlServiceProviderHtmlBuilderFormBuilder类只是为了删除true参数吗?

也许有一些更原生的方法来设置默认值?

提前感谢您的回答。

0 个答案:

没有答案