bogordesaincom / laravel-enum-simple
优雅的 Laravel 枚举实现。使用 make:enum 命令,支持 Eloquent 模型类型转换和通过语言文件进行标签翻译。从
Requires
- php: ^7.3 || ^8.0 || ^8.1 || ^8.2 || ^8.3
- illuminate/console: ^7.0 || ^8.0 || ^9.0 || ^9.1 || ^10 || ^11
- illuminate/support: ^7.0 || ^8.0 || ^9.0 || ^9.1 || ^10 || ^11
- illuminate/translation: ^7.0 || ^8.0 || ^9.0 || ^9.1 || ^10 || ^11
- myclabs/php-enum: ^1.8.4
Requires (Dev)
- mockery/mockery: ^1.6.7
- orchestra/testbench: ^5.0 || ^6.0 || ^7.0 || ^8.0
- phpunit/phpunit: ^8.0 || ^9.3 || ^10 || ^11
This package is auto-updated.
Last update: 2024-10-01 00:09:07 UTC
README
优雅的 Laravel 枚举实现
基于 MyCLabs PHP Enum 并实现了 SplEnum 接口。
您可以在 PHP Enum Readme 中找到基本功能的文档。
功能
make:enum命令- 支持为 Eloquent 模型类型转换枚举字段
- 通过语言文件进行标签翻译
- 简单的验证规则
简单的枚举示例
namespace App\Enums; use Bogordesain\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
返回 Enum 的验证规则类实例
PostStatusEnum::rule(); // new EnumRule(PostStatusEnum::class);
getConstList(bool $include_default = false): array
根据 SplEnum::getConstList 返回所有常量(可能的值)数组
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
测试
composer test
贡献
请参阅 CONTRIBUTING 和 CODE_OF_CONDUCT 了解详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 madweb.dev@gmail.com 而不是使用问题跟踪器来报告。
致谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。