ringlesoft/laravel-selectable

一个从 Laravel 集合中填充选择选项的软件包。

安装: 14

依赖: 0

建议者: 0

安全: 0

星级: 3

关注者: 1

分支: 0

公开问题: 0

类型:laravel-package

1.0.2 2024-07-02 18:44 UTC

This package is auto-updated.

Last update: 2024-09-02 19:06:25 UTC


README

Latest Version on Packagist Total Downloads

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):此方法允许您自定义选中的选项。可以是stringintstring/int数组、model或返回布尔值的可调用函数。
  • withDisabled(mixed|callable $disabled):此方法允许您自定义禁用的选项。可以是stringintstring/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

变更日志

请参阅变更日志,获取有关最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请审查我们的安全策略以了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。