azimkordpour/power-enum

这个轻量级包为您的 Enum 类提供了一些方法,以充分发挥其作用。

v1.1.0 2023-08-17 17:32 UTC

This package is auto-updated.

Last update: 2024-09-17 19:49:28 UTC


README

这个轻量级包提供了一个 Trait,允许您在 PHP 项目中充分利用 Enum 类,尤其是在现代 PHP 框架如 Laravel 中。

安装

注意:由于 Enum 是在 PHP 8.1 中引入的,此包需要最低 PHP 版本为 8.1。

您可以通过 composer 安装此包

composer require azimkordpour/power-enum

使用说明

要在您的 Enum 类中使用 PowerEnum 特性,只需像这样导入即可

<?php

use AzimKordpour\PowerEnum\Traits\PowerEnum;

enum PostStatus: string
{
    use PowerEnum;

    case Active = 'active';
    case Inactive = 'inactive';
}

现在,让我们更详细地看看这些方法。


在 Laravel 中

Eloquent 允许您将模型属性值转换为 PHP 枚举.

 <?php
 
namespace App\Models;

use App\Enums\PostStatus; 
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    /**
     * The attributes that should be cast.
     *
     * @var array
     */
    protected $casts = [
        'status' => PostStatus::class,
    ];
}

然后,您可以使用以下示例。

检查模型的状态是否为 active

$post = Post::find(1);

// The status is active.
$post->status->isActive();

返回布尔值

true

检查模型的状态是否等于给定的值

$post = Post::find(1);

// The status is active.
$post->status->equals('inactive');

返回布尔值

false

此方法与 equals 的工作方式相同

$post = Post::find(1);

// The status is active.
$post->status->is('inactive');

返回布尔值

false

获取状态的标签

$post = Post::find(1);

// The status is active.
$post->status->label();

如果没有设置标签,则返回 case 的值

"active"

有关设置自定义标签和查看 PHP 项目中所有方法的详细信息,请参阅下一节。


所有方法

静态获取 PostStatus 的值

PostStatus::values();

返回一个数组

[
    'active',
    'inactive'
]

静态获取 PostStatus 的名称

PostStatus::names();

返回一个数组

[
    'Active',
    'Inactive'
]

静态获取 PostStatus 的名称和值

PostStatus::list();

返回一个数组

[
    'Active' => 'active',
    'Inactive' => 'inactive'
]

检查 case 是否是活动 case

PostStatus::from('active')->isActive();

返回布尔值

true

检查 case 是否等于给定的值

PostStatus::Active->equals('inactive');

返回布尔值

false

此方法与 equals 的工作方式相同

PostStatus::Active->is('inactive');

返回布尔值

false

从名称初始化类

PostStatus::fromName('Active');

返回 Enum 对象

PostStatus::Active

获取 case 的标签

PostStatus::Active->label();

如果没有设置标签,则返回 case 的值

"active"

获取 case 的标签

PostStatus::Active->getLabels();

如果没有设置标签,则返回 case 的值

[
    'active' => 'active',
    'inactive' => 'inactive'
]

您可以在 Enum 类中为 case 编写自定义标签

/**
 * Set the labels of all the cases.
 */
 public static function setLabels(): array
 {
    return [
        self::Active->value => 'published post',
        self::Inactive->value => 'draft post',
    ];
 }

然后,label 方法的用法

PostStatus::Active->label();

返回

"published post"

getLabels 方法的用法

PostStatus::Active->getLables();

返回

[
    'active' => 'published post',
    'inactive' => 'draft post'
]

测试

composer test