使用 Illuminate\html 在 select 元素中再添加一个选项
Add one more option in select element using Illuminate\html
我有一个这样的创建方法:
public function create()
{
$categories = App\CategoryModel::pluck('name', 'id');
return view('posts.create', compact('categories'));
}
我想使用 Illuminate\html
向 select 元素添加一些选项。
这是我的 select 元素:
{!! Form::label('category', 'Category') !!}
{!! Form::select(null, $categories, null, ['class' => 'form', 'style' => 'height: 40px;', 'name' => 'category']); !!}
但我想再添加一个这样的选项元素:
<option disabled selected> -- Select a category -- </option>
我该怎么办?
使用prepend()
Laravel助手:
{!! Form::label('category', 'Category') !!}
{!! Form::select(null,
["value" => "Select a category", "id" => 0] + $categories,
null,
['class' => 'form', 'style' => 'height: 40px;', 'name' => 'category']) !!}
查看官方文档 here 了解更多信息。
希望对您有所帮助。
您可以使用 array_merge:
在 $categories 数组上添加一个新值
{{
Form::select(
null,
array_merge(['' => ['label' => '-- Select a category --', 'disabled' => true], $categories),
null,
['class' => 'form', 'style' => 'height: 40px;', 'name' => 'category']
}}
您可以创建自定义宏来实现这一点。按代码检查以下步骤:
1) 在 app/lib/macro.php
下创建宏
<?php
//My custom macro...
Form::macro('mySelect', function($name, $list = array(), $selected = null, $disabled = null, $options = array())
{
$selected = $this->getValueAttribute($name, $selected);
$disabled = $this->getValueAttribute($name, $disabled);
$options['id'] = $this->getIdAttribute($name, $options);
if ( ! isset($options['name'])) $options['name'] = $name;
$html = array();
foreach ($list as $list_el)
{
$selectedAttribute = $this->getSelectedValue($list_el['id'], $selected);
$disabledAttribute = $this->getSelectedValue($list_el['id'], $disabled);
$option_attr = array('value' => e($list_el['id']), 'selected' => $selectedAttribute, 'disabled' => $disabledAttribute);
$html[] = '<option'.$this->html->attributes($option_attr).'>'.e($list_el['value']).'</option>';
}
$options = $this->html->attributes($options);
$list = implode('', $html);
return "<select{$options}>{$list}</select>";
});
2) 将宏注册到 app/Providers/MacroServiceProvider.php
<?php
namespace App\Providers;
use App\Services\Macros\Macros;
use Collective\Html\HtmlServiceProvider;
/**
* Class MacroServiceProvider
* @package App\Providers
*/
class MacroServiceProvider extends HtmlServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
require base_path() . '/app/lib/macro.php';
}
.
.
.
}
3) 使用我的自定义宏:
{!!Form::mySelect('category',array(array('id' => '0', 'value'=>'-- Select a category --'), array('id' => '1', 'value'=>'My value1'), array('id' => '2', 'value'=>'My value2')), 0, 0) !!}
测试 Laravel 5.2。
我有一个这样的创建方法:
public function create()
{
$categories = App\CategoryModel::pluck('name', 'id');
return view('posts.create', compact('categories'));
}
我想使用 Illuminate\html
向 select 元素添加一些选项。
这是我的 select 元素:
{!! Form::label('category', 'Category') !!}
{!! Form::select(null, $categories, null, ['class' => 'form', 'style' => 'height: 40px;', 'name' => 'category']); !!}
但我想再添加一个这样的选项元素:
<option disabled selected> -- Select a category -- </option>
我该怎么办?
使用prepend()
Laravel助手:
{!! Form::label('category', 'Category') !!}
{!! Form::select(null,
["value" => "Select a category", "id" => 0] + $categories,
null,
['class' => 'form', 'style' => 'height: 40px;', 'name' => 'category']) !!}
查看官方文档 here 了解更多信息。
希望对您有所帮助。
您可以使用 array_merge:
在 $categories 数组上添加一个新值{{
Form::select(
null,
array_merge(['' => ['label' => '-- Select a category --', 'disabled' => true], $categories),
null,
['class' => 'form', 'style' => 'height: 40px;', 'name' => 'category']
}}
您可以创建自定义宏来实现这一点。按代码检查以下步骤:
1) 在 app/lib/macro.php
<?php
//My custom macro...
Form::macro('mySelect', function($name, $list = array(), $selected = null, $disabled = null, $options = array())
{
$selected = $this->getValueAttribute($name, $selected);
$disabled = $this->getValueAttribute($name, $disabled);
$options['id'] = $this->getIdAttribute($name, $options);
if ( ! isset($options['name'])) $options['name'] = $name;
$html = array();
foreach ($list as $list_el)
{
$selectedAttribute = $this->getSelectedValue($list_el['id'], $selected);
$disabledAttribute = $this->getSelectedValue($list_el['id'], $disabled);
$option_attr = array('value' => e($list_el['id']), 'selected' => $selectedAttribute, 'disabled' => $disabledAttribute);
$html[] = '<option'.$this->html->attributes($option_attr).'>'.e($list_el['value']).'</option>';
}
$options = $this->html->attributes($options);
$list = implode('', $html);
return "<select{$options}>{$list}</select>";
});
2) 将宏注册到 app/Providers/MacroServiceProvider.php
<?php
namespace App\Providers;
use App\Services\Macros\Macros;
use Collective\Html\HtmlServiceProvider;
/**
* Class MacroServiceProvider
* @package App\Providers
*/
class MacroServiceProvider extends HtmlServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
require base_path() . '/app/lib/macro.php';
}
.
.
.
}
3) 使用我的自定义宏:
{!!Form::mySelect('category',array(array('id' => '0', 'value'=>'-- Select a category --'), array('id' => '1', 'value'=>'My value1'), array('id' => '2', 'value'=>'My value2')), 0, 0) !!}
测试 Laravel 5.2。