ringlesoft / laravel-selectable
一个从 Laravel 集合中填充选择选项的软件包。
Requires
- php: >=8.1
- illuminate/collections: ^9.0|^10.0|^11.0
- illuminate/routing: ^9.0|^10.24|^11.0
Requires (Dev)
- roave/security-advisories: dev-latest
This package is auto-updated.
Last update: 2024-09-02 19:06:25 UTC
README
Laravel Selectable 是一个强大的软件包,它可以简化从 Laravel 集合生成 HTML 选择选项的过程。通过其灵活直观的语法,您可以轻松创建自定义选择选项,无需额外的特质或类扩展。
功能
- 轻松从 Laravel 集合生成选择选项
- 使用字符串或闭包自定义标签和值字段
- 指定已选和禁用选项
- 向选项添加数据属性和类
- 支持分组选项
- 将集合转换为可选择的数组,用于 AJAX 响应或单页应用程序
- 利用 Laravel 集合的强大功能进行更高级的过滤和排序
安装
您可以通过 composer 安装此软件包
composer require ringlesoft/laravel-selectable
无需其他配置。
使用方法
1. 基本用法
<select name="user_id"> {!! \\App\\Model\\User::all()->toSelectOptions(); !!}} </select>
这将生成一个选择下拉框,包含所有用户的选择选项,使用名称字段作为标签,id 字段作为值。
<select name="user_id">
<option value="{{$user->id}}">{{$user->name}}</option>
...
</select>
2. 行内自定义
<select name="user_id">
{!! \\App\\Model\\User::all()->toSelectOptions('email', 'uuid', '6490132934f22'); !!}}
</select>
这将生成一个选择下拉框,包含所有用户的选择选项,使用 email 字段作为标签,uuid 字段作为值。已选选项是具有 uuid 6490132934f22 的用户。
<select name="user_id">
<option value="{{$user->uuid}}" {{($user->uuid === '6490132934f22') ? 'selected' : '')}}>{{$user->email}}</option>
...
</select>
方法参数
label
: 用作选项标签的字段名称。如果提供了闭包,则使用闭包的结果作为标签。默认为name
。value
: 用作选项值的字段名称。如果提供了闭包,则使用闭包的结果作为值。默认为id
。selected
: 用作已选选项的项的值。可以是值、值的数组或闭包。disabled
: 用作禁用选项的项的值。可以是值、值的数组或闭包。
3. 高级用法
此软件包允许使用方法链从 Selectable
对象构建选择选项。使用 toSelectable()
方法将集合转换为 Selectable
对象。Selectable
对象具有多个方法,允许您自定义选项及其属性。使用 toSelectOptions
方法将 Selectable
对象转换为 HTML 选择选项。
<select name="user_id" multiple="multiple">
{!!
\App\Models\User::all()
->toSelectable()
->withValue('id')
->withLabel(fn($user) => "{$user->first_name} {$user->last_name}")
->withSelected([2, 3])
->withDisabled(fn($item) => $item->status = 'inactive')
->withDataAttribute('hidden', fn($item) => $item->status !== 'active')
->withClass('form-option custom')
->toSelectOptions();
!!}
</select>
这将生成一个多选下拉框,包含所有用户的选择选项,使用 id 字段作为 value,将 first_name 和 last_name 字段组合作为 label。默认选择 ID 为 2 和 3 的选项,禁用具有 'inactive
' 状态的选项。将为具有除 'active
' 之外状态的选项添加 'data-hidden
' 属性,并将自定义类 'form-option custom
' 应用到所有选项。
<select name="user_id" multiple="multiple">
<option value="1" data-hidden="false" class="form-option custom">David Moore</option>
<option value="2" data-hidden="false" class="form-option custom">John Doe</option>
<option value="3" data-hidden="false" class="form-option custom">Jane Doe</option>
<option value="4" data-hidden="true" class="form-option custom" disabled>Mark Manson</option>
</select>
可用方法
withLabel(string|callable $label)
: 此方法允许您自定义每个选项的标签。字符串将用作生成标签的集合字段,而可调用将用于生成标签。withValue(string|callable $value)
: 此方法允许您自定义每个选项的值。字符串将用作生成值的集合字段,而可调用将用于生成值。withSelected(mixed|callable $selected)
:此方法允许您自定义选中的选项。可以是string
、int
、string
/int
数组、model
或返回布尔值的可调用函数。withDisabled(mixed|callable $disabled)
:此方法允许您自定义禁用的选项。可以是string
、int
、string
/int
数组、model
或返回布尔值的可调用函数。withDataAttribute(string $attribute, mixed|callable $value)
:此方法允许您为每个选项添加一个数据属性。withClass(string $class)
:此方法允许您为每个选项添加一个类。toSelectItems()
:此方法将可选择的集合转换为可选择的项数组。对于Ajax响应或SPA很有用。toSelectOptions()
:此方法将可选择的集合转换为HTML选择选项字符串。Illuminate\Support\Collection
的一些方法也可用,包括groupBy()
。
注意:不建议在blade模板中编写查询。这只是为了简化演示。
获取可选项
$selectableItems = \App\Models\User::all()->toSelectable()->toSelectItems();
这会将用户集合转换为可选项数组,这对于Ajax响应或单页应用程序(SPA)很有用。
可选项结构
[ [ 'label' => 'User Name', 'value' => 'user_id', 'selected' => false, 'disabled' => false, 'dataAttributes' => ['hidden' => false], 'classes' => ['form-option', 'custom'], ], [...] ]
测试
composer test
变更日志
请参阅变更日志,获取有关最近更改的更多信息。
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
请审查我们的安全策略以了解如何报告安全漏洞。
鸣谢
- David Ringle(作者)
- 所有贡献者
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。