Laravel 数据库选择带有占位符的下拉菜单

Posted

技术标签:

【中文标题】Laravel 数据库选择带有占位符的下拉菜单【英文标题】:Laravel database select dropdown with placeholder 【发布时间】:2014-10-03 01:55:20 【问题描述】:

您好,我正在使用我的数据库中存在的客户端填充选择下拉列表,但是我首先需要一个占位符,例如Please select a Client。有人知道语法吗?

这是我目前所拥有的:

@if(count($client_options)>0)

     Form::select('client', $client_options , Input::old('client'), array('placeholder' => 'Please select a client', 'id' => 'select_client', 'class' => 'chosen-select select', 'tabindex' => '2', )) 

@endif 

占位符属性但不起作用,有人知道怎么做吗?在此先感谢

【问题讨论】:

你能不能在使用之前将另一个项目附加到客户端数组? @mike 我该怎么做..?例子? 【参考方案1】:

假设您正在 Laravel 表单构建器中创建一个下拉列表。那么代码应该是这样的——

在控制器中 -

$categories = Category::select('id', 'name')->lists('name', 'id')->prepend('Select a category', '')->toArray();

并且在视野中 -

!! Form::select('cat_id', $categories, old('cat_id')) !!

用 Laravel 5.x 测试。

或者如果你有一个类似的数组 -

$array = ['1' => 'lorem ipsum', '4' => 'Another text'];

并且在将这个数组传递给视图之后 -

!! Form::select('cat_id', $array, old('cat_id')) !!

不会有占位符。如果你通过下面的数组 -

$array = ['' => 'Select category', '1' => 'lorem ipsum category', '4' => 'Another category'];

或者有一个你想在视图中传递的集合来构建选择/下拉列表然后

$array = $collection->prepend('Select a category', '')->toArray();

您需要传递一个数组才能构建下拉列表。

注意:array_unshiftarray_merge 将无法正常工作!

【讨论】:

很好,不知道prepend 功能。 +1【参考方案2】:
@if(count($client_options)>0)

    $client_options[] = "Please select a Client";

     Form::select('client', $client_options , Input::old('client'), array('placeholder' => 'Please select a client', 'id' => 'select_client', 'class' => 'chosen-select select', 'tabindex' => '2', )) 

@endif

【讨论】:

那行不通我认为我正在执行此 if 语句,它以纯文本形式输出此 $client_options[] = "Please select a Client"; $clients_options 数组中有什么东西吗?如果你不这样做,那么它将永远不会进入 if 语句。 你可以 dd($client_options) 来检查一下吗?此外,如果您删除我的建议,它是否会按照您的预期显示一个列表(显然没有“默认”文本)。 array(3) [2]=> string(16) "Client1" [3]=> string(8) "Client2" [1]=> string(17) "Client3" 已根据有关设置存储库和实施该方法的良好建议接受了答案。已经开始了,这是一个非常干净的方法。非常感谢!【参考方案3】:

只需在控制器中使用占位符准备选择并将其传递给视图,如下所示:

$client_options = ['Select a Client'] +  Client::lists('field_name', 'id');

然后在您的视图中您可以检查$client_options 中是否包含多个项目,例如:

@if(count($client_options) > 1)
    
        Form::select(
            'client',
             $client_options ,
             Input::old('client'),
             array(
                 'id' => 'select_client',
                 'class' => 'chosen-select select',
                 'tabindex' => '2'
             )
        )
    
@endif

【讨论】:

【参考方案4】:

如果有人来到这里试图弄清楚如何将项目设置为选中,这里有一个提示。

Form:select 中的第三个数组元素设置选择什么项目:

Form::select('number', [0, 1, 2], 1)

第三个元素也可以是一个数组,用于设置多个项目为选中状态:

Form::select('number', [0, 1, 2], [1,2])

占位符始终是数组元素 0。要将占位符设置为选中,请确保 Form:select 数组元素 3 为零或数组中为零:

Form::select('number', [1, 2, 3], [0,1], ['class' => 'field', 'placeholder' => $var])

【讨论】:

以上是关于Laravel 数据库选择带有占位符的下拉菜单的主要内容,如果未能解决你的问题,请参考以下文章

Laravel/Javascript:在选择不同的选择/下拉列表后填充选择/下拉列表

重力形式选择占位符样式

使用数据库填充下拉菜单会导致Laravel 4

在 Laravel 4 中使用数据库结果填充下拉菜单

使用元素 ui 选择显示占位符值

如何从Laravel中的数据库记录中填充下拉菜单项