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 空白选项的主要内容,如果未能解决你的问题,请参考以下文章

VBA之行列的引用

UITextView 更改 selectRange 总是崩溃

Laravel Mix 未知选项“--hide-modules”错误

Linux文件内容查阅

laravel安装完成后,访问public目录,显示一片空白怎么回事

Laravel 8 返回空白页