mad-web/laravel-enum

为Laravel设计的优雅的枚举实现。通过make:enum命令,支持Eloquent模型类型转换和通过语言文件进行标签翻译。

该包的官方仓库似乎已不存在,因此该包已被冻结。

2.2.0 2020-12-21 20:28 UTC

This package is auto-updated.

Last update: 2024-04-07 00:38:14 UTC


README

Stand With Ukraine

为Laravel设计的优雅的枚举实现

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返回所有常量(可能值)数组。

变更日志

有关最近更改的更多信息,请参阅CHANGELOG

测试

composer test

贡献

请参阅CONTRIBUTINGCODE_OF_CONDUCT以获取详细信息。

安全性

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

鸣谢

许可证

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