superwen/laravel-enum

Laravel 的枚举生成器。

v1.0.0 2022-04-14 10:35 UTC

This package is auto-updated.

Last update: 2024-09-14 16:24:16 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

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

贡献

有关详细信息,请参阅 CONTRIBUTINGCODE_OF_CONDUCT

安全

如果您发现任何安全问题,请通过电子邮件 andrea.marco.sartori@gmail.com 而不是使用问题跟踪器

鸣谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件