mad-web / laravel-enum
为Laravel设计的优雅的枚举实现。通过make:enum命令,支持Eloquent模型类型转换和通过语言文件进行标签翻译。
该包的官方仓库似乎已不存在,因此该包已被冻结。
Requires
- php: ^7.3 || ^8.0
- illuminate/console: ^7.0 || ^8.0
- illuminate/support: ^7.0 || ^8.0
- illuminate/translation: ^7.0 || ^8.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
README
为Laravel设计的优雅的枚举实现
基于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
贡献
请参阅CONTRIBUTING和CODE_OF_CONDUCT以获取详细信息。
安全性
如果您发现任何安全问题,请通过电子邮件madweb.dev@gmail.com报告,而不是使用问题跟踪器。
鸣谢
许可证
麻省理工学院许可证(MIT)。请参阅许可证文件获取更多信息。