iteks/laravel-enum

一个全面的Laravel包,提供增强的枚举功能,包括属性处理、选择数组转换以及流畅的界面访问,以实现Laravel应用程序中强大的枚举管理。

v1.0.3 2024-04-17 11:36 UTC

This package is auto-updated.

Last update: 2024-09-17 12:31:11 UTC


README

Laravel ENUM

Total Downloads Latest Stable Version License

Laravel Enum包丰富了Laravel的枚举支持,集成了高级功能,如属性处理、选择数组转换和界面访问,以实现流畅的枚举操作。专为Laravel应用程序设计,它提供了一套工具,用于支持后端枚举和属性增强枚举,包括描述性注释、ID管理、标签生成和元数据关联。通过提供直观的流畅接口,该包简化了Laravel中枚举的工作,增强了表单、API响应等方面的枚举可用性。无论您是在定义选择选项、查询枚举属性还是将枚举与Laravel功能紧密集成,Laravel Enum都简化了这些过程,使Laravel应用程序中的枚举管理既强大又高效。由iteks提供,由jeramyhing开发。

开始使用

需要PHP 8.1+

通过Composer包管理器安装Laravel Enum

composer require iteks/laravel-enum

用法

EnumExample类

Laravel Enum方法是为PHP 8后端枚举类设计的。

Laravel Enum助手和特性方法扩展了现有的后端枚举类,以实现更灵活的枚举处理。此外,Laravel Enum还提供了一种流畅的方式,用于在支持后端枚举的枚举情况下添加和管理PHP 8属性。该包提供了四个可用的属性,可以轻松分配给您的枚举情况:描述Id标签元数据。下面的ExampleEnum类演示了如何将这些属性应用到枚举中。您可以选择使用哪些属性。

use Iteks\Attributes\Description;
use Iteks\Attributes\Id;
use Iteks\Attributes\Label;
use Iteks\Attributes\Metadata;
use Iteks\Traits\BackedEnum;
use Iteks\Traits\HasAttributes;

enum ExampleEnum: int
{
    use BackedEnum;
    use HasAttributes;

    #[Description('Lorem ipsum dolor sit amet, consectetur adipiscing elit.')]
    #[Id(0)]
    #[Label('First-Example')]
    #[Metadata(['key' => 'value'])]
    case FirstExample = 1;

    #[Description('Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.')]
    #[Id(1)]
    #[Label('SecondExample (Example)')]
    #[Metadata('{"key": "value"}')]
    case SecondExample = 2;

    #[Description('Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.')]
    #[Id(2)]
    #[Label('3rd Eg.')]
    #[Metadata([])]
    case ThirdExample = 3;
}

top

枚举助手(BackedEnum)

首先,导入助手类

use Iteks\Support\Facades\Enum;

注意:此组助手不需要将任何特性应用于目标枚举类。您可以直接使用以下方法

top

Enum::asSelectArray()

获取后端枚举类作为数组以填充选择元素。数组将包含一个text键列,包含显示格式的案例名称值,以及一个value键列,包含原始的更简单的值。

注意:该方法首先会检查目标枚举类应用了哪些 标签Id 属性。如果存在,则优先使用这些值。如果不存在,则从case名称返回一个变体的标题值。

Enum::asSelectArray(ExampleEnum::class);
array:3 [▼ 
  0 => array:2 [▼
    "text" => "First-Example"
    "value" => 1
  ]
  1 => array:2 [▼
    "text" => "SecondExample (Example)"
    "value" => 2
  ]
  2 => array:2 [▼
    "text" => "3rd Eg."
    "value" => 3
  ]
]

top

Enum::toLabel()

从case名称创建一个标签。

Enum::toLabel(ExampleEnum::FirstExample);
"First Example"

top

Enum::toLabels()

从case名称创建并编译标签数组。

Enum::toLabels(ExampleEnum::class);
array:3 [▼
  0 => "First Example"
  1 => "Second Example"
  2 => "Third Example"
]

top

枚举助手(HasAttributes)

首先,确保目标枚举类应用了 HasAttributes 特性,如上例中的 ExampleEnum 类 所示。

然后,导入辅助类

use Iteks\Support\Facades\Enum;

您可以使用以下方法

top

Enum::attributes()

检索所有case的所有属性。

Enum::attributes(ExampleEnum::FirstExample);
array:5 [▼
  "simpleValue" => 1
  "description" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
  "id" => 0
  "label" => "First-Example"
  "metadata" => array:1 [▼
    "key" => "value"
  ]
]
Enum::attributes(ExampleEnum::FirstExample, ['id', 'label']);
array:2 [▼
  "id" => 0
  "label" => "First-Example"
]
Enum::attributes(ExampleEnum::class);
array:3 [▼
  "FirstExample" => array:5 [▼
    "simpleValue" => 1
    "description" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    "id" => 0
    "label" => "First-Example"
    "metadata" => array:1 [▼
      "key" => "value"
    ]
  ]
  "SecondExample" => array:5 [▼
    "simpleValue" => 2
    "description" => "Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
    "id" => 1
    "label" => "SecondExample (Example)"
    "metadata" => "{"key": "value"}"
  ]
  "ThirdExample" => array:5 [▼
    "simpleValue" => 3
    "description" => "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
    "id" => 2
    "label" => "3rd Eg."
    "metadata" => []
  ]
]
Enum::attributes(ExampleEnum::class, ['description', 'metadata']);
array:3 [▼
  "FirstExample" => array:2 [▼
    "description" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    "metadata" => array:1 [▼
      "key" => "value"
    ]
  ]
  "SecondExample" => array:2 [▼
    "description" => "Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
    "metadata" => "{"key": "value"}"
  ]
  "ThirdExample" => array:2 [▼
    "description" => "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
    "metadata" => []
  ]
]

top

Enum::description()

检索描述属性。

Enum::description(ExampleEnum::FirstExample);
"Lorem ipsum dolor sit amet, consectetur adipiscing elit."

top

Enum::descriptions()

检索所有case的描述属性。

Enum::descriptions(ExampleEnum::class);
array:3 [▼
  0 => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
  1 => "Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
  2 => "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
]

top

Enum::id()

检索id属性。

Enum::id(ExampleEnum::FirstExample);
0

top

Enum::ids()

检索所有case的id属性。

Enum::ids(ExampleEnum::class);
array:3 [▼
  0 => 0
  1 => 1
  2 => 2
]

top

Enum::label()

检索标签属性。

Enum::label(ExampleEnum::FirstExample);
"First-Example"

top

Enum::labels()

检索所有case的标签属性。

Enum::labels(ExampleEnum::class);
array:3 [▼
  0 => "First-Example"
  1 => "SecondExample (Example)"
  2 => "3rd Eg."
]

top

Enum::metadata()

检索元数据属性。

Enum::metadata(ExampleEnum::FirstExample);
array:1 [▼
  "key" => "value"
]

top

Enum::metadatum()

检索所有case的元数据属性。

Enum::metadatum(ExampleEnum::class);
array:3 [▼
  0 => array:1 [▼
    "key" => "value"
  ]
  1 => "{"key": "value"}"
  2 => []
]

top

枚举特性(BackedEnum)

首先,确保目标枚举类应用了 BackedEnum 特性,如上例中的 ExampleEnum 类 所示。

然后,您可以使用以下方法

top

asSelectArray()

获取后端枚举类作为数组以填充选择元素。数组将包含一个text键列,包含显示格式的案例名称值,以及一个value键列,包含原始的更简单的值。

注意:该方法首先会检查目标枚举类应用了哪些 标签Id 属性。如果存在,则优先使用这些值。如果不存在,则从case名称返回一个变体的标题值。

ExampleEnum::asSelectArray();
array:3 [▼
  0 => array:2 [▼
    "text" => "First-Example"
    "value" => 0
  ]
  1 => array:2 [▼
    "text" => "SecondExample (Example)"
    "value" => 1
  ]
  2 => array:2 [▼
    "text" => "3rd Eg."
    "value" => 2
  ]
]

top

fromName()

将标量映射到枚举实例。

ExampleEnum::fromName('FirstExample');
App\Enums\ExampleEnum {#297 ▼
  +name: "FirstExample"
  +value: 1
}

top

name()

检索给定简单值的case名称。

ExampleEnum::name(1);
"FirstExample"

top

names()

检索包含所有case名称的数组。

ExampleEnum::names();
array:3 [▼
  0 => "FirstExample"
  1 => "SecondExample"
  2 => "ThirdExample"
]

top

toLabel()

从case名称创建一个标签。

ExampleEnum::toLabel(1);
"First Example"

top

toLabels()

从case名称创建并编译标签数组。

ExampleEnum::toLabels();
array:3 [▼
  0 => "First Example"
  1 => "Second Example"
  2 => "Third Example"
]

top

tryFromName()

将标量映射到枚举实例或null。

ExampleEnum::tryFromName('FirstExample');
App\Enums\ExampleEnum {#297 ▼
  +name: "FirstExample"
  +value: 1
}

top

value()

检索给定case名称的简单值。

ExampleEnum::value('FirstExample');
1

top

values()

检索包含所有简单值的数组。

ExampleEnum::values();
array:3 [▼
  0 => 1
  1 => 2
  2 => 3
]

top

枚举特性(HasAttributes)

首先,确保目标枚举类应用了 HasAttributes 特性,如上例中的 ExampleEnum 类 所示。

然后,您可以使用以下方法

top

attributes()

检索所有case的所有属性。

ExampleEnum::attributes('FirstExample');
array:5 [▼
  "simpleValue" => 1
  "description" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
  "id" => 0
  "label" => "First-Example"
  "metadata" => array:1 [▼
    "key" => "value"
  ]
]
ExampleEnum::attributes('FirstExample', ['id', 'label']);
array:2 [▼
  "id" => 0
  "label" => "First-Example"
]
ExampleEnum::attributes();
array:3 [▼
  "FirstExample" => array:5 [▼
    "simpleValue" => 1
    "description" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    "id" => 0
    "label" => "First-Example"
    "metadata" => array:1 [▼
      "key" => "value"
    ]
  ]
  "SecondExample" => array:5 [▼
    "simpleValue" => 2
    "description" => "Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
    "id" => 1
    "label" => "SecondExample (Example)"
    "metadata" => "{"key": "value"}"
  ]
  "ThirdExample" => array:5 [▼
    "simpleValue" => 3
    "description" => "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
    "id" => 2
    "label" => "3rd Eg."
    "metadata" => []
  ]
]
ExampleEnum::attributes(null, ['description', 'metadata']);
array:3 [▼
  "FirstExample" => array:2 [▼
    "description" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    "metadata" => array:1 [▼
      "key" => "value"
    ]
  ]
  "SecondExample" => array:2 [▼
    "description" => "Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
    "metadata" => "{"key": "value"}"
  ]
  "ThirdExample" => array:2 [▼
    "description" => "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
    "metadata" => []
  ]
]

top

description()

检索描述属性。

ExampleEnum::description('FirstExample');
"Lorem ipsum dolor sit amet, consectetur adipiscing elit."

top

descriptions()

检索所有case的描述属性。

ExampleEnum::descriptions();
array:3 [▼
  0 => "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
  1 => "Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
  2 => "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
]

top

id()

检索id属性。

ExampleEnum::id('FirstExample');
0

top

ids()

检索所有case的id属性。

ExampleEnum::ids();
array:3 [▼
  0 => 0
  1 => 1
  2 => 2
]

top

label()

检索标签属性。

ExampleEnum::label('FirstExample');
"First-Example"

top

labels()

检索所有case的标签属性。

ExampleEnum::labels();
array:3 [▼
  0 => "First-Example"
  1 => "SecondExample (Example)"
  2 => "3rd Eg."
]

top

metadata()

检索元数据属性。

ExampleEnum::metadata('FirstExample');
array:1 [▼
  "key" => "value"
]

top

metadatum()

检索所有case的元数据属性。

ExampleEnum::metadatum();
array:3 [▼
  0 => array:1 [▼
    "key" => "value"
  ]
  1 => "{"key": "value"}"
  2 => []
]

top

字符串助手宏

这些辅助函数在安装包时启动,并立即可供使用。

top

Str::splitConstantCase()

将 "CONSTANT_CASE" 字符串分割成由空格分隔的单词。

Str::splitConstantCase('FIRST_EXAMPLE');
"FIRST EXAMPLE"

top

Str::splitEnumCase()

将 "EnumCase" 字符串分割成由空格分隔的单词。

Str::splitEnumCase('FirstExample');
"First Example"

top