Laravel selectRange 空白选项
Posted
技术标签:
【中文标题】Laravel selectRange 空白选项【英文标题】:Laravel selectRange blank option 【发布时间】:2014-10-06 08:50:21 【问题描述】:我正在创建一个“日”选择下拉菜单。使用 selectRange 我可以这样做:
Form::selectRange('day', 1, 31, $day)
问题是,当表单加载时,如果未设置$day
,则默认选择1
。是否可以使用 selectRange 为他们提供具有 NULL 值的“请选择”选项?
【问题讨论】:
【参考方案1】:改用 Form::select。
Form::select('day', array('' => 'Please Choose...') + range(1,31))
【讨论】:
【参考方案2】:如果要修改选项值,请使用带有 range 和 array_combine 的 Form Select:
Form::select('month', array('all' => 'all') + array_combine(range(1,12),range(1,12)) )
【讨论】:
【参考方案3】:我不相信有办法通过内置的 selectRange 实现这一点,但是可以使用 form macros。以下宏大致执行您要查找的内容,但可能需要进行一些清理。
Form::macro('selectRangeWithDefault', function($name, $start, $end, $selected = null, $default = null, $attributes = [])
if ($default === null)
return Form::selectRange($name, $start, $end, $selected, $attributes);
$items = [];
if (!in_array($default, $items))
$items['NULL'] = $default;
if($start > $end)
$interval = -1;
$startValue = $end;
$endValue = $start;
else
$interval = 1;
$startValue = $start;
$endValue = $end;
for ($i=$startValue; $i<$endValue; $i+=$interval)
$items[$i . ""] = $i;
$items[$endValue] = $endValue;
return Form::select($name, $items, isset($selected) ? $selected : $default, $attributes);
);
用法如下:
Form::selectRangeWithDefault('day', 1, 31, $day, 'Please Choose...')
请注意,我的代码的想法和基础来自:https://***.com/a/25069699/3492098
【讨论】:
【参考方案4】:这个适用于反向列表:
Form::macro('selectRangeWithDefault', function($name, $begin, $end, $selected = null, $default = null, $attributes = [])
if (!is_array($default) || $default === null)
return Form::selectRange($name, $begin, $end, $selected, $attributes);
$range = $default + array_combine($range = range($begin, $end), $range);
return Form::select($name, $range, $selected, $attributes);
);
示例:
!! Form::selectRangeWithDefault('year', date('Y'), 1915, $user->getBirthYear(), ['' => 'YYYY']) !!
如果您正在寻找如何添加宏:Where to put html macros in laravel 5?
【讨论】:
【参考方案5】:使用 Form::select 代替 Form::selectRange
此外,根据最佳实践,您可以使用占位符参数来创建空白选项。
Form::select('day', range(1, 31), null, ['placeholder' => ''])
【讨论】:
【参考方案6】:使用占位符
Form::selectRange('day', 1, 31, $day,['class' => 'form-control input-lg','id'=>'day','placeholder' => 'Please Choose'])
【讨论】:
以上是关于Laravel selectRange 空白选项的主要内容,如果未能解决你的问题,请参考以下文章
UITextView 更改 selectRange 总是崩溃
Laravel Mix 未知选项“--hide-modules”错误