geekk-net/laravel-enum

为Laravel提供优雅的枚举实现。通过make:enum命令,Eloquent模型的支持以及通过语言文件进行标签翻译。

2.2.0 2024-05-08 08:48 UTC

This package is auto-updated.

Last update: 2024-09-08 09:37:53 UTC


README

此包是已删除包的分支 https://github.com/mad-web/laravel-enum.git

此包不再受支持。请切换到php enum。

Latest Version on Packagist Software License Build Status StyleCI Coverage Status Quality Score Total Downloads

基于MyCLabs PHP Enum 并实现了SplEnum接口。

您可以在PHP Enum Readme中找到基本功能的文档。

功能

  • make:enum命令
  • 为Eloquent模型支持枚举字段转换
  • 通过语言文件进行标签翻译
  • 简单的验证规则

简单的枚举示例

namespace App\Enums;

use MadWeb\Enum\Enum;

/**
 * @method static PostStatusEnum FOO()
 * @method static PostStatusEnum BAR()
 * @method static PostStatusEnum BAZ()
 */
final class PostStatusEnum extends Enum
{
    const __default = self::PENDING;

    const PUBLISHED = 'published';
    const PENDING = 'pending';
    const DRAFT = 'draft';
}

安装

对于laravel < 7版本 - 使用1.0分支

您可以通过composer安装此包

composer require mad-web/laravel-enum

用法

通过artisan命令创建新的枚举类

php artisan make:enum PostStatusEnum

要填充枚举类,请将您的值传递给name参数之后

php artisan make:enum PostStatusEnum DRAFT=draft PENDING=pending PUBLISHED=published

创建枚举类的实例

$status = new PostStatusEnum(PostStatusEnum::PENDING);

// or just use magic static method
$status = PostStatusEnum::PENDING();

枚举支持原生的自定义转换功能。在$casts数组中指定枚举类作为属性

class Post extends Model
{
    protected $fillable = ['title', 'status'];

    protected $casts = [
        'status' => PostStatusEnum::class,
    ];
}

之后,您可以使用枚举类来获取和设置枚举字段

$post = Post::first();

$status = $post->status; // PostStatusEnum

$post->status = PostStatusEnum::PENDING();

$post->save();

枚举值标签(本地化)

创建enums.php语言文件并声明枚举值的标签

// resources/lang/en/enums.php

return [
    PostStatusEnum::class => [
        PostStatusEnum::PENDING => 'Pending Label',
        PostStatusEnum::PUBLISHED => 'Published Label',
        PostStatusEnum::DRAFT => 'Draft Label',
    ],
];

然后获取一个标签

PostStatusEnum::PENDING()->label(); // Pending Label

要覆盖默认枚举语言文件路径,发布laravel-enum配置

php artisan vendor:publish --provider=MadWeb\\Enum\\EnumServiceProvider

并更改lang_file_path选项

// config/enum.php

return [
    'lang_file_path' => 'custom.path.to.enums',
];

验证规则

您可以使用EnumRule类或Enum::rule()方法通过请求验证枚举值。

public function store(Request $request)
{
    $this->validate($request, [
        'status' => ['required', new EnumRule(PostStatusEnum::class)],
    ]);

    // OR

    $this->validate($request, [
        'status' => ['required', PostStatusEnum::rule()],
    ]);
}

如果您想验证枚举键而不是枚举值,您可以指定您想验证键而不是值。

public function store(Request $request)
{
    $this->validate($request, [
        'status' => ['required', new EnumRule(PostStatusEnum::class, true)],
    ]);

    // OR

    $this->validate($request, [
        'status' => ['required', PostStatusEnum::ruleByKey()],
    ]);
}

要自定义验证消息,请将enum键添加到验证语言文件中

// resources/lang/en/validation.php
return [
    //...
    'enum' => 'Custom validation message form enum attribute :attribute',
];

其他方法

getRandomKey(): string

返回枚举中的随机键。

PostStatusEnum::getRandomKey(); // Returns 'PUBLISHED` or `PENDING` or `DRAFT`

getRandomValue()

返回枚举中的随机值。

PostStatusEnum::getRandomValue(); // Returns 'published` or `pending` or `draft`

label(): string

返回枚举值对象的标签。

PostStatusEnum::PUBLISHED()->label(); // Returns 'published` or custom label declared in a lang file

labels(): array

返回枚举的所有标签。

PostStatusEnum::labels(); // Returns ['published`, 'pending', 'draft'] or array of custom labels declared in a lang file

is($value): bool

检查当前枚举值是否等于给定的枚举。

$status = PostStatusEnum::PENDING();


PostStatusEnum::PUBLISHED()->is($status); // false

PostStatusEnum::PENDING()->is($status); // true

// or

PostStatusEnum::PUBLISHED()->is($status->getValue()); // false

PostStatusEnum::PENDING()->is($status->getValue()); // true

// or check one of multiple values

$status->is([PostStatusEnum::DRAFT(), PostStatusEnum::PUBLISHED()]) // false

$status->is([PostStatusEnum::DRAFT(), PostStatusEnum::PENDING()]) // true

rule(): EnumRule

返回枚举验证规则类的实例。

PostStatusEnum::rule(); // new EnumRule(PostStatusEnum::class);

getConstList(bool $include_default = false): array

根据SplEnum::getConstList返回所有常量(可能的值)数组。

更新日志

有关最近更改的更多信息,请参阅更新日志

测试

composer test

贡献

请参阅CONTRIBUTING行为准则的详细信息。

安全

如果您发现任何安全相关的问题,请通过电子邮件madweb.dev@gmail.com而不是使用问题跟踪器。

鸣谢

许可

麻省理工学院许可证(MIT)。更多信息请参阅许可证文件