sypspace/laravel-enum

Laravel 枚举生成器。

资助包维护!
cerbero90

1.3.0 2020-09-19 10:21 UTC

This package is auto-updated.

Last update: 2024-09-11 11:23:52 UTC


README

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

Laravel 包,引入了新的 Artisan 命令,用于生成枚举类

它提供了一种简单的语法来指定和映射枚举类中的常量,同时添加 PHPDoc 标签,以便 IDE 识别可以调用的常量作为实例化枚举类的方法。

安装

通过 Composer

$ composer require cerbero/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 将常量名称转换为小写以生成键

以下配对命令生成相同的枚举类

$ 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)。请参阅许可证文件获取更多信息。