xeriab / laravel-enumeration
为Laravel提供的另一个简单、可扩展且强大的枚举实现。
Requires
- php: ^8.0|^8.1
- ext-json: *
- composer/composer: ^2.2
- illuminate/contracts: ^9.0
- illuminate/support: ^9.0
- laminas/laminas-code: ^3.4 || ^4.0
- nikic/php-parser: ^4.13
Requires (Dev)
- doctrine/dbal: ^3.3
- ergebnis/composer-normalize: ^2.24
- mockery/mockery: ^1.4.4
- orchestra/testbench: ^7.0
- phpmd/phpmd: @stable
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.7
- phpstan/phpstan-beberlei-assert: ^1.0
- phpunit/phpunit: ^9.5.10
- squizlabs/php_codesniffer: ^3.6
- vimeo/psalm: ^4.24
This package is not auto-updated.
Last update: 2024-09-19 13:08:53 UTC
README
关于Laravel枚举
为Laravel提供的简单、可扩展且强大的枚举实现。
- 枚举键值对作为类常量
- 功能齐全的方法集
- 枚举实例化
- 标记/位枚举
- 类型提示
- 属性转换
- 枚举 artisan 生成器
- 验证规则,将枚举键或值作为输入参数传递
- 本地化支持
- 通过宏可扩展
由 Xeriab Nabil 创建
跳转到
安装
要求
- Laravel
9
或更高版本 - PHP
8.0
或更高版本
通过Composer
composer require xeriab/laravel-enumeration
枚举库
浏览和从常用社区贡献的枚举列表中下载。
基本用法
枚举定义
您可以使用以下Artisan命令生成新的枚举类
php artisan make:enumeration UserType
现在,您只需将枚举可以有的可能值作为常量添加。
<?php
namespace App\Enums;
use Exen\Laravel\Enumeration\Enum;
final class UserType extends Enum
{
const Administrator = 0;
const Moderator = 1;
const Subscriber = 2;
const SuperAdministrator = 3;
}
就是这样!请注意,因为枚举值被定义为普通常量,所以您可以像访问任何其他类常量一样访问它们。
UserType::Administrator // Has a value of 0
实例化
实例化枚举以在函数之间传递它们是有用的,这有利于类型提示。
此外,无法用无效值实例化枚举,因此您可以确定传递的值始终有效。
为了方便,枚举可以以多种方式实例化
// Standard new PHP class, passing the desired enumeration value as a parameter
$enumInstance = new UserType(UserType::Administrator);
// Same as the constructor, instantiate by value
$enumInstance = UserType::fromValue(UserType::Administrator);
// Use an enumeration key instead of its value
$enumInstance = UserType::fromKey('Administrator');
// Statically calling the key name as a method, utilizing __callStatic magic
$enumInstance = UserType::Administrator();
// Attempt to instantiate a new Enumeration using the given key or value. Returns null if the Enumeration cannot be instantiated.
$enumInstance = UserType::coerce($someValue);
如果您希望您的IDE自动完成静态实例化助手,您可以通过Artisan命令生成PHPDoc注释。
默认情况下,所有位于 app/Enums
的枚举都将被注释(您可以通过传递路径给 --folder
来更改文件夹)
php artisan enum:annotate
您可以通过指定类名来注释单个类
php artisan enum:annotate "App\Enums\UserType"
实例属性
一旦您有一个枚举实例,您就可以通过属性访问 key
、value
和 description
。
$userType = UserType::fromValue(UserType::SuperAdministrator);
$userType->key; // SuperAdministrator
$userType->value; // 0
$userType->description; // Super Administrator
如果您正在将枚举实例传递到blade视图中,这特别有用。
实例转换
枚举实例可以实现 __toString()
魔术方法,因此可以作为字符串转换。
这意味着它们可以在blade视图中输出,例如。
$userType = UserType::fromValue(UserType::SuperAdministrator);
(string) $userType // '0'
实例相等
您可以通过将值传递给 is
方法来检查实例是否与任何值相等。为了方便起见,还有一个 isNot
方法,它是 is
方法的相反。
$admin = UserType::fromValue(UserType::Administrator);
$admin->is(UserType::Administrator); // true
$admin->is($admin); // true
$admin->is(UserType::Administrator()); // true
$admin->is(UserType::Moderator); // false
$admin->is(UserType::Moderator()); // false
$admin->is('random-value'); // false
您还可以使用 in
方法检查实例的值是否与可能的值数组匹配,并使用 notIn
来检查实例值是否不在值数组中。也可以检查可迭代对象。
$admin = UserType::fromValue(UserType::Administrator);
$admin->in([UserType::Moderator, UserType::Administrator]); // true
$admin->in([UserType::Moderator(), UserType::Administrator()]); // true
$admin->in([UserType::Moderator, UserType::Subscriber]); // false
$admin->in(['random-value']); // false
$admin->notIn([UserType::Moderator, UserType::Administrator]); // false
$admin->notIn([UserType::Moderator(), UserType::Administrator()]); // false
$admin->notIn([UserType::Moderator, UserType::Subscriber]); // true
$admin->notIn(['random-value']); // true
类型提示
枚举实例的一个好处是它使您能够使用类型提示,如下所示。
function canPerformAction(UserType $userType)
{
if ($userType->is(UserType::SuperAdministrator)) {
return true;
}
return false;
}
$userType1 = UserType::fromValue(UserType::SuperAdministrator);
$userType2 = UserType::fromValue(UserType::Moderator);
canPerformAction($userType1); // Returns true
canPerformAction($userType2); // Returns false
标记/位枚举
标准枚举一次代表一个值,但标记或位枚举可以同时表示多个值。这使得它们非常适合当你想要表达有限选项集的多重选择时。一个很好的例子是用户权限,其中可能存在有限数量的权限,但用户可以有零个、一些或所有这些权限。
您可以使用以下 Artisan 命令创建标记枚举
php artisan make:enumeration UserPermissions --flagged
定义值
在定义值时,必须使用 2 的幂,最简单的方法是使用左移运算符<<
,如下所示
final class UserPermissions extends FlaggedEnum
{
const ReadComments = 1 << 0;
const WriteComments = 1 << 1;
const EditComments = 1 << 2;
const DeleteComments = 1 << 3;
// The next one would be `1 << 4` and so on...
}
定义快捷方式
您可以使用位运算符|
来设置快捷方式值,该值代表一组给定的值。
final class UserPermissions extends FlaggedEnum
{
const ReadComments = 1 << 0;
const WriteComments = 1 << 1;
const EditComments = 1 << 2;
const DeleteComments = 1 << 3;
// Shortcuts
const Member = self::ReadComments | self::WriteComments; // Read and write.
const Moderator = self::Member | self::EditComments; // All the permissions a Member has, plus Edit.
const Admin = self::Moderator | self::DeleteComments; // All the permissions a Moderator has, plus Delete.
}
实例化标记枚举
有几种方法可以实例化标记枚举
// Standard new PHP class, passing the desired enumeration values as an array of values or array of enumeration instances
$permissions = new UserPermissions([UserPermissions::ReadComments, UserPermissions::EditComments]);
$permissions = new UserPermissions([UserPermissions::ReadComments(), UserPermissions::EditComments()]);
// Static flags method, again passing the desired enumeration values as an array of values or array of enumeration instances
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::EditComments]);
$permissions = UserPermissions::flags([UserPermissions::ReadComments(), UserPermissions::EditComments()]);
属性强制转换与单个值枚举的工作方式相同。
空标记枚举
标记枚举可以完全不包含值。每个标记枚举都有一个预定义的常量None
,它相当于0
。
UserPermissions::flags([])->value === UserPermissions::None; // True
标记枚举方法
除了标准枚举方法外,还有一系列有助于标记枚举的方法。
注意:在任何传递静态属性的地方,您也可以传递枚举实例。
setFlags(array $flags): Enumeration
将枚举的标志设置为给定的标志数组。
$permissions = UserPermissions::flags([UserPermissions::ReadComments]);
$permissions->flags([UserPermissions::EditComments, UserPermissions::DeleteComments]); // Flags are now: EditComments, DeleteComments.
addFlag($flag): Enumeration
将给定的标志添加到枚举中
$permissions = UserPermissions::flags([UserPermissions::ReadComments]);
$permissions->addFlag(UserPermissions::EditComments); // Flags are now: ReadComments, EditComments.
addFlags(array $flags): Enumeration
将给定的标志添加到枚举中
$permissions = UserPermissions::flags([UserPermissions::ReadComments]);
$permissions->addFlags([UserPermissions::EditComments, UserPermissions::WriteComments]); // Flags are now: ReadComments, EditComments, WriteComments.
addAllFlags(): Enumeration
将所有标志添加到枚举中
$permissions = UserPermissions::flags([UserPermissions::ReadComments]);
$permissions->addAllFlags(); // Enumeration now has all flags
removeFlag($flag): Enumeration
从枚举中移除给定的标志
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::WriteComments]);
$permissions->removeFlag(UserPermissions::ReadComments); // Flags are now: WriteComments.
removeFlags(array $flags): Enumeration
从枚举中移除给定的标志
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::WriteComments, UserPermissions::EditComments]);
$permissions->removeFlags([UserPermissions::ReadComments, UserPermissions::WriteComments]); // Flags are now: EditComments.
removeAllFlags(): Enumeration
从枚举中移除所有标志
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::WriteComments]);
$permissions->removeAllFlags();
hasFlag($flag): bool
检查枚举是否有指定的标志。
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::WriteComments]);
$permissions->hasFlag(UserPermissions::ReadComments); // True
$permissions->hasFlag(UserPermissions::EditComments); // False
hasFlags(array $flags): bool
检查枚举是否有所有指定的标志。
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::WriteComments]);
$permissions->hasFlags([UserPermissions::ReadComments, UserPermissions::WriteComments]); // True
$permissions->hasFlags([UserPermissions::ReadComments, UserPermissions::EditComments]); // False
notHasFlag($flag): bool
检查枚举是否没有指定的标志。
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::WriteComments]);
$permissions->notHasFlag(UserPermissions::EditComments); // True
$permissions->notHasFlag(UserPermissions::ReadComments); // False
notHasFlags(array $flags): bool
检查枚举是否没有任何指定的标志。
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::WriteComments]);
$permissions->notHasFlags([UserPermissions::ReadComments, UserPermissions::EditComments]); // True
$permissions->notHasFlags([UserPermissions::ReadComments, UserPermissions::WriteComments]); // False
getFlags(): Enumeration[]
将标志作为实例数组返回。
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::WriteComments]);
$permissions->getFlags(); // [UserPermissions::ReadComments(), UserPermissions::WriteComments()];
hasMultipleFlags(): bool
检查枚举上是否设置了多个标志。
$permissions = UserPermissions::flags([UserPermissions::ReadComments, UserPermissions::WriteComments]);
$permissions->hasMultipleFlags(); // True;
$permissions->removeFlag(UserPermissions::ReadComments)->hasMultipleFlags(); // False
getBitmask(): int
获取枚举的位掩码。
UserPermissions::Member()->getBitmask(); // 11;
UserPermissions::Moderator()->getBitmask(); // 111;
UserPermissions::Admin()->getBitmask(); // 1111;
UserPermissions::DeleteComments()->getBitmask(); // 1000;
在 Eloquent 查询中使用标记枚举
要直接在 Eloquent 查询中使用标记枚举,您可以在模型上使用QueriesFlaggedEnums
特质,该特质为您提供了以下方法
hasFlag($column, $flag): Builder
User::hasFlag('permissions', UserPermissions::DeleteComments())->get();
notHasFlag($column, $flag): Builder
User::notHasFlag('permissions', UserPermissions::DeleteComments())->get();
hasAllFlags($column, $flags): Builder
User::hasAllFlags('permissions', [UserPermissions::EditComment(), UserPermissions::ReadComment()])->get();
hasAnyFlags($column, $flags): Builder
User::hasAnyFlags('permissions', [UserPermissions::DeleteComments(), UserPermissions::EditComments()])->get();
属性转换
您可以使用 Laravel 内置的内置自定义强制转换将模型属性转换为枚举。这将使属性在获取时转换为枚举实例,在设置时转换回枚举值。由于Enumeration::class
实现了Castable
协议,因此您只需指定枚举类的类名
use xeriab\Enumeration\Tests\Enums\UserType;
use Illuminate\Database\Eloquent\Model;
class Example extends Model
{
protected $casts = [
'random_flag' => 'boolean', // Example standard laravel cast
'user_type' => UserType::class, // Example enumeration cast
];
}
现在,当您访问Example
模型的user_type
属性时,底层值将作为UserType
枚举返回。
$example = Example::first();
$example->user_type // Instance of UserType
请参阅枚举实例上可用的方法和属性,以充分利用属性强制转换。
您可以通过传递枚举值或另一个枚举实例来设置值。
$example = Example::first();
// Set using enumeration value
$example->user_type = UserType::Moderator;
// Set using enumeration instance
$example->user_type = UserType::Moderator();
自定义$model->toArray()
行为
当使用toArray
(或将模型/模型从控制器返回作为响应)时,Laravel 将调用枚举实例的toArray
方法。
默认情况下,这将仅返回其原生类型的值。您可能还想访问其他属性(键、描述),例如返回到javascript应用程序。
要自定义此行为,您可以覆盖枚举实例上的 toArray
方法。
// Example Enumeration
final class UserType extends Enum
{
const ADMINISTRATOR = 0;
const MODERATOR = 1;
}
$instance = UserType::Moderator();
// Default
public function toArray()
{
return $this->value;
}
// Returns int(1)
// Return all properties
public function toArray()
{
return $this;
}
// Returns an array of all the properties
// array(3) {
// ["value"]=>
// int(1)"
// ["key"]=>
// string(9) "MODERATOR"
// ["description"]=>
// string(9) "Moderator"
// }
转换底层原生类型
许多数据库将所有内容都返回为字符串(例如,整数可能以字符串 '1'
的形式返回)。为了减少库用户的摩擦,我们使用类型强制来找出预期值。如果您想控制这一点,可以覆盖枚举类上的 parseDatabase
静态方法
final class UserType extends Enum
{
const Administrator = 0;
const Moderator = 1;
public static function parseDatabase($value)
{
return (int) $value;
}
}
从 parseDatabase
方法返回 null
将导致模型上的属性也为 null
。如果您的数据库存储不一致的空值(例如,使用空字符串而不是 NULL
),这可能很有用。
模型注解
如果您正在将模型的属性转换为枚举,可以使用 laravel-ide-helper 包来自动为您生成属性 docblocks。
迁移
推荐
因为枚举在代码级别强制一致性,所以在数据库级别再次这样做是不必要的,因此推荐的数据库列类型为 string
或 int
,具体取决于您的枚举值。这意味着您可以在代码中添加/删除枚举值,而无需担心您的数据库层。
use App\Enums\UserType;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table): void {
$table->bigIncrements('id');
$table->timestamps();
$table->string('type')
->default(UserType::Moderator);
});
}
}
使用 enumeration
列类型
或者,您可以在迁移中使用 Enumeration
类来定义枚举列。枚举值必须定义为字符串。
use App\Enums\UserType;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table): void {
$table->bigIncrements('id');
$table->timestamps();
$table->enumeration('type', UserType::getValues())
->default(UserType::Moderator);
});
}
}
验证
数组验证
枚举值
您可以使用 EnumValue
规则来验证传递给控制器的枚举值是否为给定枚举的有效值。
use xeriab\Enumeration\Rules\EnumValue;
public function store(Request $request)
{
$this->validate($request, [
'user_type' => ['required', new EnumValue(UserType::class)],
]);
}
默认情况下,类型检查设置为严格,但您可以通过将 false
传递给 EnumValue
类的第二个可选参数来绕过此设置。
new EnumValue(UserType::class, false) // Turn off strict type checking.
枚举键
您还可以使用 EnumKey
规则进行键验证。如果您将枚举键用作URL参数进行排序或过滤等,这很有用。
use xeriab\Enumeration\Rules\EnumKey;
public function store(Request $request)
{
$this->validate($request, [
'user_type' => ['required', new EnumKey(UserType::class)],
]);
}
枚举实例
此外,您还可以验证参数是否为给定枚举的实例。
use xeriab\Enumeration\Rules\Enumeration;
public function store(Request $request)
{
$this->validate($request, [
'user_type' => ['required', new Enumeration(UserType::class)],
]);
}
管道验证
您还可以使用 'pipe' 语法来设置规则。
enum_value_:enumclass,[strict]
enum_key_:enumclass
enumeration_:enumclass
'user_type' => 'required|enum_value:' . UserType::class,
'user_type' => 'required|enum_key:' . UserType::class,
'user_type' => 'required|enum:' . UserType::class,
本地化
验证消息
运行以下命令将语言文件发布到您的 resources/lang
文件夹。
php artisan vendor:publish --provider='Exen\Laravel\Enumeration\EnumerationServiceProvider' --tag='translations'
枚举描述
您可以使用 Laravel 内置的 本地化 功能来翻译由 getDescription
方法返回的字符串。
为您的每种受支持语言添加一个新的 enums.php
键文件。在这个例子中有一个英文和一个西班牙文。
// resources/lang/en/enums.php
<?php
use App\Enums\UserType;
return [
UserType::class => [
UserType::Administrator => 'Administrator',
UserType::SuperAdministrator => 'Super administrator',
],
];
// resources/lang/es/enums.php
<?php
use App\Enums\UserType;
return [
UserType::class => [
UserType::Administrator => 'Administrador',
UserType::SuperAdministrator => 'Súper administrador',
],
];
现在,您只需确保您的枚举实现了下面的 LocalizedEnum
接口
use xeriab\Enumeration\Enumeration;
use xeriab\Enumeration\Contracts\LocalizedEnum;
final class UserType extends Enum implements LocalizedEnum
{
// ...
}
现在,getDescription
方法将查找您的本地化文件中的值。如果给定键不存在值,则返回默认描述。
自定义描述
如果您想为枚举值返回自定义描述,请为您的枚举常量添加 Description
属性
use xeriab\Enumeration\Enumeration;
use xeriab\Enumeration\Attributes\Description;
final class UserType extends Enum
{
const Administrator = 'Administrator';
#[Description('Super admin')]
const SuperAdministrator = 'SuperAdministrator';
}
现在调用 UserType::SuperAdministrator()->description
返回 Super admin
而不是 Super administrator
。
如果您想对描述有更多控制,也可以在基枚举类上重写 getDescription
方法。
扩展枚举基类
基类《枚举
》实现了Laravel Macroable
特性,这意味着它可以很容易地通过你的自定义函数进行扩展。如果你有一个经常添加到每个枚举中的函数,可以使用宏。
假设我们想要获取枚举的asArray
方法的反转版本,我们可以通过以下方式实现:
Enumeration::macro('asFlippedArray', function() {
return array_flip(self::asArray());
});
现在,我可以在每个枚举上调用它:UserType::asFlippedArray()
。
最好在服务提供者的boot方法中注册宏。
PHPStan集成
如果你使用PHPStan进行静态分析,可以启用扩展以正确识别魔术实例化方法。
将以下内容添加到你的项目phpstan.neon
配置中:
includes:
- vendor/xeriab/laravel-enumeration/extension.neon
Artisan命令列表
php artisan make:enum
创建一个新的枚举类。使用--flagged
选项创建标记枚举。
了解更多信息
php artisan enum:annotate
为枚举类生成DocBlock注解。
了解更多信息
枚举类参考
static getKeys(mixed $values = null): array
返回枚举的所有或自定义键的数组。
UserType::getKeys(); // Returns ['Administrator', 'Moderator', 'Subscriber', 'SuperAdministrator']
UserType::getKeys(UserType::Administrator); // Returns ['Administrator']
UserType::getKeys(UserType::Administrator, UserType::Moderator); // Returns ['Administrator', 'Moderator']
UserType::getKeys([UserType::Administrator, UserType::Moderator]); // Returns ['Administrator', 'Moderator']
static getValues(mixed $keys = null): array
返回枚举的所有或自定义值的数组。
UserType::getValues(); // Returns [0, 1, 2, 3]
UserType::getValues('Administrator'); // Returns [0]
UserType::getValues('Administrator', 'Moderator'); // Returns [0, 1]
UserType::getValues(['Administrator', 'Moderator']); // Returns [0, 1]
static getKey(mixed $value): string
返回给定枚举值的键。
UserType::getKey(1); // Returns 'Moderator'
UserType::getKey(UserType::Moderator); // Returns 'Moderator'
static getValue(string $key): mixed
返回给定枚举键的值。
UserType::getValue('Moderator'); // Returns 1
static hasKey(string $key): bool
检查枚举是否包含给定的键。
UserType::hasKey('Moderator'); // Returns 'True'
static hasValue(mixed $value, bool $strict = true): bool
检查枚举是否包含给定的值。
UserType::hasValue(1); // Returns 'True'
// It's possible to disable the strict type checking:
UserType::hasValue('1'); // Returns 'False'
UserType::hasValue('1', false); // Returns 'True'
static getDescription(mixed $value): string
返回枚举值的句子大小写的键。如果猜测的描述不合适,可以自定义描述。
UserType::getDescription(3); // Returns 'Super administrator'
UserType::getDescription(UserType::SuperAdministrator); // Returns 'Super administrator'
static getRandomKey(): string
返回枚举中的随机键。对于工厂很有用。
UserType::getRandomKey(); // Returns 'Administrator', 'Moderator', 'Subscriber' or 'SuperAdministrator'
static getRandomValue(): mixed
返回枚举中的随机值。对于工厂很有用。
UserType::getRandomValue(); // Returns 0, 1, 2 or 3
static getRandomInstance(): mixed
返回枚举的随机实例。对于工厂很有用。
UserType::getRandomInstance(); // Returns an instance of UserType with a random value
static asArray(): array
以关联数组的形式返回枚举的键值对。
UserType::asArray(); // Returns ['Administrator' => 0, 'Moderator' => 1, 'Subscriber' => 2, 'SuperAdministrator' => 3]
static asSelectArray(): array
返回用于选择中的枚举,格式为 value => description。
UserType::asSelectArray(); // Returns [0 => 'Administrator', 1 => 'Moderator', 2 => 'Subscriber', 3 => 'Super administrator']
static fromValue(mixed $enumValue): Enumeration
返回被调用枚举的实例。更多关于枚举实例化的信息。
UserType::fromValue(UserType::Administrator); // Returns instance of Enumeration with the value set to UserType::Administrator
static getInstances(): array
返回所有可能的被调用枚举实例的数组,键名为常量名称。
var_dump(UserType::getInstances());
array(4) {
'Administrator' =>
class xeriab\Enumeration\Tests\Enums\UserType#415 (3) {
public $key =>
string(13) "Administrator"
public $value =>
int(0)
public $description =>
string(13) "Administrator"
}
'Moderator' =>
class xeriab\Enumeration\Tests\Enums\UserType#396 (3) {
public $key =>
string(9) "Moderator"
public $value =>
int(1)
public $description =>
string(9) "Moderator"
}
'Subscriber' =>
class xeriab\Enumeration\Tests\Enums\UserType#393 (3) {
public $key =>
string(10) "Subscriber"
public $value =>
int(2)
public $description =>
string(10) "Subscriber"
}
'SuperAdministrator' =>
class xeriab\Enumeration\Tests\Enums\UserType#102 (3) {
public $key =>
string(18) "SuperAdministrator"
public $value =>
int(3)
public $description =>
string(19) "Super administrator"
}
}
static coerce(mixed $enumKeyOrValue): ?Enumeration
尝试使用给定的键或值创建新的枚举。如果枚举无法实例化,则返回null。
UserType::coerce(0); // Returns instance of UserType with the value set to UserType::Administrator
UserType::coerce('Administrator'); // Returns instance of UserType with the value set to UserType::Administrator
UserType::coerce(99); // Returns null (not a valid enumeration value)
模板
运行以下命令以将存根文件发布到应用程序根目录下的stubs
文件夹:
php artisan vendor:publish --provider='Exen\Laravel\Enumeration\EnumerationServiceProvider' --tag='stubs'