Laravel selectRange空白选项

and*_*ber 5 forms formbuilder laravel laravel-4

我正在创建一个"日"选择下拉列表.使用selectRange我可以这样做:

{{ Form::selectRange('day', 1, 31, $day) }}
Run Code Online (Sandbox Code Playgroud)

问题是,当表单加载时,如果$day未设置,则1默认选择.是否可以使用selectRange为它们提供具有NULL值的"请选择"选项?

小智 6

如果要修改选项值,请使用带有 range 和 array_combine 的表单选择:

{{ Form::select('month', array('all' => 'all') + array_combine(range(1,12),range(1,12)) ) }}
Run Code Online (Sandbox Code Playgroud)


小智 5

请改用Form :: select.

{{ Form::select('day', array('' => 'Please Choose...') + range(1,31)) }}
Run Code Online (Sandbox Code Playgroud)


小智 2

我不相信有办法通过内置的 selectRange 来实现这一点,但是可以使用表单宏。以下宏大致执行您正在寻找的内容,但可能需要一些清理。

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);
});
Run Code Online (Sandbox Code Playgroud)

用法如下:

{{ Form::selectRangeWithDefault('day', 1, 31, $day, 'Please Choose...') }}
Run Code Online (Sandbox Code Playgroud)

请注意,我的代码的想法和基础来自:/sf/answers/1754878961/