mo-masoud/laravel-enum
Composer 安装命令:
composer require mo-masoud/laravel-enum
包简介
Elegant Enum implementation for Laravel. With make:enum command, ability to casting for Eloquent models and labels translations via lang files.
关键字:
README 文档
README
Based on MyCLabs PHP Enum and implements SplEnum interface.
You could find documentation for base features in PHP Enum Readme.
Features:
make:enumcommand- ability to cast enum fields for Eloquent models
- labels translation via lang files
- simple validation rule
Simple Enum Example
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'; }
Installation
For Laravel < 7 version - use 1.0 branch.
You can install the package via composer:
composer require mad-web/laravel-enum
Usage
Make new Enum class via artisan command:
php artisan make:enum PostStatusEnum
to populate Enum with your own values, pass it after name argument:
php artisan make:enum PostStatusEnum DRAFT=draft PENDING=pending PUBLISHED=published
Create instance of Enum class
$status = new PostStatusEnum(PostStatusEnum::PENDING); // or just use magic static method $status = PostStatusEnum::PENDING();
Enums support native Custom Casts feature out of the box.
Specify Enum class for attribute in $casts array:
class Post extends Model { protected $fillable = ['title', 'status']; protected $casts = [ 'status' => PostStatusEnum::class, ]; }
after that you could get and set enum field using enum classes
$post = Post::first(); $status = $post->status; // PostStatusEnum $post->status = PostStatusEnum::PENDING(); $post->save();
Enum values labels (Localization)
Create enums.php lang file and declare labels for enum values
// resources/lang/en/enums.php return [ PostStatusEnum::class => [ PostStatusEnum::PENDING => 'Pending Label', PostStatusEnum::PUBLISHED => 'Published Label', PostStatusEnum::DRAFT => 'Draft Label', ], ];
and get a label
PostStatusEnum::PENDING()->label(); // Pending Label
To override default enum lang file path, publish laravel-enum config
php artisan vendor:publish --provider=MadWeb\\Enum\\EnumServiceProvider
and change lang_file_path option
// config/enum.php return [ 'lang_file_path' => 'custom.path.to.enums', ];
Validation Rule
You may validate an enum value from a request by using the EnumRule class or Enum::rule() method.
public function store(Request $request) { $this->validate($request, [ 'status' => ['required', new EnumRule(PostStatusEnum::class)], ]); // OR $this->validate($request, [ 'status' => ['required', PostStatusEnum::rule()], ]); }
If you want to validate an enum key instead of an enum value you can by specifying you want to validate against the key instead of the value.
public function store(Request $request) { $this->validate($request, [ 'status' => ['required', new EnumRule(PostStatusEnum::class, true)], ]); // OR $this->validate($request, [ 'status' => ['required', PostStatusEnum::ruleByKey()], ]); }
To customize validation message, add enum key to validation lang file
// resources/lang/en/validation.php return [ //... 'enum' => 'Custom validation message form enum attribute :attribute', ];
Additional methods
getRandomKey(): string
Returns a random key from the enum.
PostStatusEnum::getRandomKey(); // Returns 'PUBLISHED` or `PENDING` or `DRAFT`
getRandomValue()
Returns a random value from the enum.
PostStatusEnum::getRandomValue(); // Returns 'published` or `pending` or `draft`
label(): string
Returns label for the enum value object
PostStatusEnum::PUBLISHED()->label(); // Returns 'published` or custom label declared in a lang file
labels(): array
Returns all labels for a enum
PostStatusEnum::labels(); // Returns ['published`, 'pending', 'draft'] or array of custom labels declared in a lang file
is($value): bool
Checks whether the current enum value is equal to a given enum
$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
Returns instance of validation rule class for the Enum
PostStatusEnum::rule(); // new EnumRule(PostStatusEnum::class);
getConstList(bool $include_default = false): array
Returns all consts (possible values) as an array according to SplEnum::getConstList
Changelog
Please see CHANGELOG for more information on what has changed recently.
Testing
composer test
Contributing
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
Security
If you discover any security related issues, please email madweb.dev@gmail.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.
mo-masoud/laravel-enum 适用场景与选型建议
mo-masoud/laravel-enum 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.03k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2024 年 05 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「enum」 「mad-web」 「laravel-enum」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 mo-masoud/laravel-enum 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 mo-masoud/laravel-enum 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 mo-masoud/laravel-enum 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Enum type behavior for Yii2 based on class constants
Package for using native php enums.
A PHP Abstract Enum Class
Compatibility layer for emulating enumerations in PHP < 8.1 and native enumerations in PHP >= 8.1
Enum type behavior and helper for Yii2, for PostgreSQL only
统计信息
- 总下载量: 2.03k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 20
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-05-09