bogordesain / lumen-enum
为 Lumen 提供优雅的 Enum 实现。通过 make:enum 命令,可以为 Eloquent 模型进行类型转换,并通过语言文件进行标签翻译。
Requires
- php: ^7.3 || ^8.0 || ^8.1
- illuminate/console: ^7.0 || ^8.0 || ^9.0 || ^10.0
- illuminate/support: ^7.0 || ^8.0 || ^9.0 || ^10.0
- illuminate/translation: ^7.0 || ^8.0 || ^9.0 || ^10.0
- myclabs/php-enum: ^1.7.0
Requires (Dev)
- mockery/mockery: ^1.0.0
- orchestra/testbench: ^5.0 || ^6.0
- phpunit/phpunit: ^8.0 || ^9.3
This package is auto-updated.
Last update: 2024-09-18 15:27:40 UTC
README
基于 MyCLabs PHP Enum 并实现了 SplEnum 接口。
您可以在 PHP Enum Readme 中找到基础功能的文档。
特性
make:enum
命令- 能够对 Eloquent 模型的枚举字段进行类型转换
- 通过语言文件进行标签翻译
- 简单的验证规则
本包 Fork 自 Mad Web Enum
简单的 Enum 示例
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 命令创建新的 Enum 类
php artisan make:enum PostStatusEnum
要填充 Enum 的自定义值,请将其传递给 name
参数之后
php artisan make:enum PostStatusEnum DRAFT=draft PENDING=pending PUBLISHED=published
创建 Enum 类的实例
$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
贡献
请参阅 CONTRIBUTING 和 CODE_OF_CONDUCT 了解详细信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件 madweb.dev@gmail.com 而不是使用问题跟踪器。
致谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。