superwen / laravel-enum
Laravel 的枚举生成器。
Requires
- php: ^7.1|^8.0
- illuminate/console: ^5.6|^6.0|^7.0|^8.0|^9.0
- illuminate/support: ^5.6|^6.0|^7.0|^8.0|^9.0
- rexlabs/enum: ^2.0
Requires (Dev)
- orchestra/testbench: ^3.6|^4.0|^5.0|^6.0
- phpunit/phpunit: >=7.0
- squizlabs/php_codesniffer: ^3.0
README
Laravel 包,引入了一个新的 Artisan 命令来生成 Enum 类。
它提供了一个简单的语法来指定和映射 Enum 类中的常量,同时添加 PHPDoc 标签以使 IDE 识别哪些常量可以作为方法调用以实例化 Enum 类。
安装
通过 Composer
$ composer require superwen/laravel-enum
使用方法
可以通过调用 Artisan 命令 make:enum
并指定类名和常量名来生成枚举。可以通过管道(请注意引号的使用)一次性定义多个枚举。
$ php artisan make:enum Status 'IN_PROGRESS|COMPLETE|FAILED'
在上面的例子中没有定义键,在这种情况下,键默认等于其小写常量名。这就是 Status
枚举的外观
<?php namespace App\Enums; use Rexlabs\Enum\Enum; /** * The Status enum. * * @method static self IN_PROGRESS() * @method static self COMPLETE() * @method static self FAILED() */ class Status extends Enum { const IN_PROGRESS = 'in_progress'; const COMPLETE = 'complete'; const FAILED = 'failed'; }
尽管如此,您可能需要定义自己的键,可以通过使用 =
字符将常量名和键配对来实现
$ php artisan make:enum Status 'IN_PROGRESS=1|COMPLETE=2|FAILED=3'
上面的命令将生成以下 Status
枚举
<?php namespace App\Enums; use Rexlabs\Enum\Enum; /** * The Status enum. * * @method static self IN_PROGRESS() * @method static self COMPLETE() * @method static self FAILED() */ class Status extends Enum { const IN_PROGRESS = 1; const COMPLETE = 2; const FAILED = 3; }
类似地,您可以通过使用 =
字符将键和值配对来指定枚举值
$ php artisan make:enum Status 'IN_PROGRESS=1=In progress|COMPLETE=2=Complete|FAILED=3=Failed'
上面的命令将生成以下 Status
枚举并实现 map()
方法
<?php namespace App\Enums; use Rexlabs\Enum\Enum; /** * The Status enum. * * @method static self IN_PROGRESS() * @method static self COMPLETE() * @method static self FAILED() */ class Status extends Enum { const IN_PROGRESS = 1; const COMPLETE = 2; const FAILED = 3; /** * Retrieve a map of enum keys and values. * * @return array */ public static function map() : array { return [ static::IN_PROGRESS => 'In progress', static::COMPLETE => 'Complete', static::FAILED => 'Failed', ]; } }
有时您可能需要在键或值中定义值数组,您可以通过提供 JSON 字符串来实现这一点
$ php artisan make:enum Status 'NAMES={"in_progress":"In progress","complete":"Complete"}'
此包将为您构建、缩进和格式化数组
<?php namespace App\Enums; use Rexlabs\Enum\Enum; /** * The Status enum. * * @method static self NAMES() */ class Status extends Enum { const NAMES = [ 'in_progress' => 'In progress', 'complete' => 'Complete', ]; }
您还可以使用 --keys
选项生成键,而无需定义它们
--keys=bitwise
生成位键(1,2,4,8...)--keys=int0
生成 0 索引整数键(1,2,3,4...)--keys=int1
生成 1 索引整数键(0,1,2,3...)--keys=lower
通过将常量名转换为小写来生成键
以下配对命令生成相同的 Enum 类
$ php artisan make:enum Status 'IN_PROGRESS=1|COMPLETE=2|FAILED=4' $ php artisan make:enum Status 'IN_PROGRESS|COMPLETE|FAILED' --keys=bitwise $ php artisan make:enum Status 'IN_PROGRESS=0|COMPLETE=1|FAILED=2' $ php artisan make:enum Status 'IN_PROGRESS|COMPLETE|FAILED' --keys=int0 $ php artisan make:enum Status 'IN_PROGRESS=1|COMPLETE=2|FAILED=3' $ php artisan make:enum Status 'IN_PROGRESS|COMPLETE|FAILED' --keys=int1 $ php artisan make:enum Status 'IN_PROGRESS=in_progress|COMPLETE=complete|FAILED=failed' $ php artisan make:enum Status 'IN_PROGRESS|COMPLETE|FAILED' --keys=lower
当提供 --keys
时,您可以通过使用 =
字符将名称和值配对来定义枚举值
$ php artisan make:enum JSON 'HEX_TAG=Hex Tag|HEX_AMP=Hex Amp|HEX_APOS=Hex Apos|HEX_QUOT=Hex Quot' --keys=bitwise
上面的命令将生成以下 JSON
枚举
<?php namespace App\Enums; use Rexlabs\Enum\Enum; /** * The JSON enum. * * @method static self HEX_TAG() * @method static self HEX_AMP() * @method static self HEX_APOS() * @method static self HEX_QUOT() */ class JSON extends Enum { const HEX_TAG = 1; const HEX_AMP = 2; const HEX_APOS = 4; const HEX_QUOT = 8; /** * Retrieve a map of enum keys and values. * * @return array */ public static function map() : array { return [ static::HEX_TAG => 'Hex Tag', static::HEX_AMP => 'Hex Amp', static::HEX_APOS => 'Hex Apos', static::HEX_QUOT => 'Hex Quot', ]; } }
默认情况下,枚举在 app/Enums
目录中生成。如果您更喜欢其他位置,可以设置选项 --path
(或快捷键 -p
)
$ php artisan make:enum Status 'IN_PROGRESS|COMPLETE|FAILED' --path=Other/Directory
上面的命令将在 app/Other/Directory
中生成 Status
类。
如果您尝试生成一个已存在的枚举,除非您设置了选项 --force
(或快捷键 -f
),否则现有枚举不会被覆盖
$ php artisan make:enum Status 'IN_PROGRESS|COMPLETE|FAILED' --force
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
测试
$ composer test
贡献
有关详细信息,请参阅 CONTRIBUTING 和 CODE_OF_CONDUCT
安全
如果您发现任何安全问题,请通过电子邮件 andrea.marco.sartori@gmail.com 而不是使用问题跟踪器
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件