simplesquid/nova-enum-field

Laravel Nova 字段,用于为资源添加枚举。

v3.1.0 2023-02-21 08:13 UTC

This package is auto-updated.

Last update: 2024-09-16 14:38:13 UTC


README

Latest Version on Packagist Tests Code styling MIT License Total Downloads

Laravel Nova 字段,用于为资源添加枚举。此字段使用 BenSampo/laravel-enum 包,请首先查看那里的安装说明。

Screenshot of the enum field

安装

您可以通过 composer 在使用 Nova 的 Laravel 应用中安装此包

composer require simplesquid/nova-enum-field

设置

强烈建议您在模型中使用属性转换。请参阅 BenSampo/laravel-enum 文档,这可以这样做

use App\Enums\UserType;
use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    protected $casts = [
        'user_type' => UserType::class,
    ];
}

使用方法

您可以在 Nova 资源中使用 Enum 字段如下

namespace App\Nova;

use App\Enums\UserType;
use SimpleSquid\Nova\Fields\Enum\Enum;

class Example extends Resource
{
    // ...

    public function fields(Request $request)
    {
        return [
            // ...

            Enum::make('User Type')->attach(UserType::class),

            // ...
        ];
    }
}

标记枚举

您可以在 Nova 资源中使用 FlaggedEnum 字段如下(请参阅 标记/位运算枚举 设置)

namespace App\Nova;

use App\Enums\UserPermissions;
use SimpleSquid\Nova\Fields\Enum\FlaggedEnum;

class Example extends Resource
{
    // ...

    public function fields(Request $request)
    {
        return [
            // ...

            FlaggedEnum::make('User Permissions')->attach(UserPermissions::class),

            // ...
        ];
    }
}

过滤器

如果您想使用提供的 Nova Select 过滤器(它与 EnumFlaggedEnum 字段兼容),可以按如下方式包含它

namespace App\Nova;

use App\Enums\UserPermissions;
use App\Enums\UserType;
use SimpleSquid\Nova\Fields\Enum\EnumFilter;

class Example extends Resource
{
    // ...

    public function filters(Request $request)
    {
        return [
            new EnumFilter('user_type', UserType::class),
            
            new EnumFilter('user_permissions', UserPermissions::class),
            
            // With optional filter name:
            (new EnumFilter('user_type', UserType::class))
                ->name('Type of user'),
                
             // With optional default value:
            (new EnumFilter('user_type', UserType::class))
                ->default(UserType::Administrator),
        ];
    }
}

或者,您可能希望使用提供的 Nova 布尔过滤器(它也与 EnumFlaggedEnum 字段兼容)

namespace App\Nova;

use App\Enums\UserPermissions;
use App\Enums\UserType;
use SimpleSquid\Nova\Fields\Enum\EnumBooleanFilter;

class Example extends Resource
{
    // ...

    public function filters(Request $request)
    {
        return [
            new EnumBooleanFilter('user_type', UserType::class),
            
            new EnumBooleanFilter('user_permissions', UserPermissions::class),
            
            // With optional filter name:
            (new EnumBooleanFilter('user_type', UserType::class))
                ->name('Type of user'),
                
            // With optional default values:
            (new EnumBooleanFilter('user_type', UserType::class))
                ->default([
                    UserType::Administrator,
                    UserType::Moderator,
                ]),
            
            // When filtering a FlaggedEnum, it will default to filtering
            // by ANY flags, however you may wish to filter by ALL flags:
            (new EnumBooleanFilter('user_permissions', UserPermissions::class))
                ->filterAllFlags(),
        ];
    }
}

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的更多信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请参阅 我们的安全策略 了解如何报告安全漏洞。

鸣谢

基于 spatie/skeleton-php 的包骨架。

关于我们

SimpleSquid 是一家位于荷兰瓦尔肯堡的小型网站开发和设计公司。

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件