如何将性别、公司下拉框转换为Laravel {!! Form !!}格式?
Hey,我来帮你把这两个下拉框转换成Laravel的{!! Form !!}格式,顺便优化一下原代码里的小问题(比如第二个下拉框嵌套了多余的col-md-2 div)。
首先要注意:Laravel 5.8之后默认不再自带Form门面,你需要先安装Laravel Collective的HTML扩展包,执行这个命令:
composer require laravelcollective/html
然后在config/app.php的providers数组里添加:
Collective\Html\HtmlServiceProvider::class,
在aliases数组里添加:
'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class,
接下来是两个下拉框的转换代码:
1. 性别选择下拉框
这里保留了原有的禁用默认提示选项,以及所有可选值:
<div class="col-md-2"> <div class="form-group-sm"> {!! Form::select('gender', [ '' => ['text' => '<small>Gender</small>', 'disabled' => true, 'selected' => true], 'All' => 'All', 'Male' => 'Male', 'Female' => 'Female' ], null, [ 'class' => 'form-control form-control-sm', 'id' => 'gender' ]) !!} </div> </div>
- 我们把默认的提示选项做成数组形式,给它加上
disabled和selected属性,确保它是默认显示但不可选的状态 - 用
{!! !!}来渲染<small>标签,避免被HTML转义
2. 公司选择下拉框
原代码里的循环逻辑有点问题(只有当ID=1的公司存在时才会显示"全部"选项),我们调整成更可靠的方式:
首先在控制器里处理公司数据,排除ID=1的公司,并提前加入"全部"选项:
// 获取排除ID=1的公司,用pluck直接生成"名称=>ID"的数组 $companies = \App\Models\Company::where('id', '!=', 1)->pluck('name', 'id'); // 把"全部"选项加到数组开头(如果需要"全部"对应空值,就改成'' => 'All') $companyOptions = ['All' => 'All'] + $companies->toArray();
然后在视图里用Form生成下拉框:
<div class="col-md-2"> <div class="form-group-sm"> {!! Form::select('company', [ '' => ['text' => 'Company', 'disabled' => true, 'selected' => true], ] + $companyOptions, null, [ 'class' => 'form-control form-control-sm', 'id' => 'company' ]) !!} </div> </div>
- 移除了原代码里多余的内层
col-md-2div,避免布局错乱 - 提前在控制器处理数据,让视图更简洁,逻辑更清晰
- 同样保留了禁用的默认提示选项
这样转换后的代码既符合Laravel Form的写法,又保留了原HTML的所有功能,还优化了逻辑和布局~
内容的提问来源于stack exchange,提问作者gwapo
相关产品推荐
相关产品推荐

