/laravel-enum

A simple and easy-to-use enumeration extension package to help you manage enumerations in your project more conveniently, supporting Laravel and Lumen. 更方便地在项目中定义并使用枚举。

Primary LanguagePHP

laravel-enum

A simple and easy-to-use enumeration extension package to help you manage enumerations in your project more conveniently, supporting Laravel and Lumen.

  • 一个简单好用的枚举扩展包,帮助你更方便地管理项目中的枚举,支持 Laravel 和 Lumen。

Test StyleCI Latest Stable Version Total Downloads Monthly Downloads License

介绍

laravel-enum 主要用来扩展项目中的枚举使用,通过合理的定义枚举可以使代码更加规范,更易阅读和维护。

php8.1 版本后内置枚举支持,更多信息可以查看:https://www.php.net/manual/zh/language.enumerations.php

参与社区讨论:- 教你更优雅地写 API 之「枚举使用」

概览

  • 扩展原生的 BackedEnum,支持多语言描述
  • 提供更多种实用的方式来实例化枚举、枚举 name、value 取值
  • 提供了便捷的比较方法isisNotin,用于枚举实例之间的对比

安装

支持 Laravel 10 以上版本:

$ composer require jiannei/laravel-enum -vvv

Laravel

  • 发布资源文件
$ php artisan vendor:publish --provider="Jiannei\Enum\Laravel\Providers\LaravelServiceProvider"

Lumen

  • 注册服务容器
$app->register(\Jiannei\Enum\Laravel\Providers\LumenServiceProvider::class);

使用

更为具体的使用可以查看测试用例:https://github.com/Jiannei/laravel-enum/tree/main/tests

常规使用

  • 定义
<?php

namespace Jiannei\Enum\Laravel\Tests\Enums;

use Jiannei\Enum\Laravel\Support\Traits\EnumEnhance;

enum UserType: int
{
    use EnumEnhance;

    case ADMINISTRATOR = 0;
    case MODERATOR = 1;
    case SUBSCRIBER = 2;
}
  • 使用
// 获取枚举的值
UserTypeEnum::ADMINISTRATOR->value;// 0

// 获取所有已定义枚举的名称
$names = UserTypeEnum::names();// ['ADMINISTRATOR', 'MODERATOR', 'SUBSCRIBER']

// 获取所有已定义枚举的值
$values = UserTypeEnum::values();// [0, 1, 2]
  • 枚举校验
// 检查定义的枚举中是否包含某个「枚举值」
UserTypeEnum::hasValue(1);// true
UserTypeEnum::hasValue(-1);// false

// 检查定义的枚举中是否包含某个「枚举名称」 

UserTypeEnum::hasName('MODERATOR');// true
UserTypeEnum::hasName('ADMIN');// false
  • 枚举实例化:枚举实例化以后可以方便地通过对象实例访问枚举的 key、value 以及 description 属性的值。
  • toArray
$array = UserTypeEnum::toArray();
  • toSelectArray
$array = UserTypeEnum::toSelectArray();// 支持多语言配置

/*
[
    0 => '管理员',
    1 => '监督员',
    2 => '订阅用户',
]
*/

枚举转换和校验

Model 中的枚举转换

License

MIT