如何使用Laravel-enum


简介

我曾经在Rails中使用Enum进行开发,并且想在Laravel中使用它,所以我进行了检查。

环境

  • PHP7.1
  • Laravel 5.6

1.什么是枚举?

摘录自Wikipedia

枚举类型(枚举类型)是一种抽象数据类型,它具有程序员选择的每个标识符作为计算机编程中的一个有限集。枚举通常用作没有数字顺序的分类变量,例如卡片套装,但枚举通常在实际编译或运行时实现为整数。每个标识符通常具有不同的整数值,但是可以有意将相同的整数值分配给多个标识符(即,定义别名)。

与使用整数相比,与显式使用幻数相比,枚举还有助于提高程序源的可读性。在某些语言中,枚举的整数表示形式对程序员是隐藏的,这可以防止程序员在算术运算中滥用枚举的值。

在某些

语言中,布尔逻辑类型是预先声明的二进制枚举。

例如,假设您定义类型为boolean的标志,例如公開非公開
当实际存储在数据库中的值为01时,当您想将公開非公開作为字符串处理时,枚举非常方便。

2.包装

Laravel有两个可以处理枚举的软件包。

<表格>

github星数

信息量


<身体>

laravel-enum

71

没什么

laravel-enums

24

没什么


综上所述,似乎没有太大的区别。

当我看到

文档时,以前的laravel-enum更易于理解,因此我选择了它。

3.简介

1
$ composer require bensampo/laravel-enum

使用

作曲家安装后,可以使用php artisan make:enum命令。

4.试用

如以上示例中所述,我将为公開非公開创建枚举。

1
$ php artisan make:enum PublishStateType

如果执行

或更多,将在app目录下创建Enums目录,并在其中创建PublishStateType.php

PublishStateType.php,它看起来像下面的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

namespace App\Enums;

use BenSampo\Enum\Enum;

final class PublishStateType extends Enum
{
    const OptionOne = 0;
    const OptionTwo = 1;
    const OptionThree = 2;

    /**
     * Get the description for an enum value
     *
     * @param $value
     * @return string
     */
    public static function getDescription($value): string
    {
        if ($value === self::OptionOne) {
            return 'Option one';
        }

        return parent::getDescription($value);
    }
}

如下创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

namespace App\Enums;

use BenSampo\Enum\Enum;

final class PublishStateType extends Enum
{
    const Private = 0;
    const Public = 1;

    /**
     * Get the description for an enum value
     *
     * @param $value
     * @return string
     */
    public static function getDescription($value): string
    {
        switch ($value){
            case self::Private:
                return '非公開';
                brake;
            case self::Public:
                return '公開';
                brake;
            default:
                return self::getKey($value);
        }
    }
}

使用

及更高版本,PublishStateType的设置一次即可。

5.控制器中使用的

1
use App\Enums\PublishStateType;

写入控制器的顶部,然后将

1
2
PublishStateType::getDescription('0'); // 非公開
PublishStateType::getDescription('1'); // 公開

可以将其视为

6.在视图

中使用

视图中使用它时,请用完整路径描述它。

1
2
<p><center>[wp_ad_camp_3]</center></p><p>{{\App\Enums\PublishStateType::getDescription('0')}}</p> // 非公開
<p>{{\App\Enums\PublishStateType::getDescription('1')}}</p> // 公開

变为

7.自定义getValue

如果使用定义的方法

getValue,则可以通过将常量定义的键放在参数中来获取常量的值。

1
2
<p>{{\App\Enums\PublishStateType::getValue('Private')}}</p> // 0
<p>{{\App\Enums\PublishStateType::getValue('Public')}}</p> // 1

但是我想做的是
我想从字符串公開非公開而不是PrivatePublic

中获取常量值

因此,自定义getValue方法。
打开PublishStateType.php并执行以下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php

namespace App\Enums;

use BenSampo\Enum\Enum;

final class PublishStateType extends Enum
{
    const Private = 0;
    const Public = 1;

    /**
     * Get the description for an enum value
     *
     * @param $value
     * @return string
     */
    public static function getDescription($value): string
    {
        switch ($value){
            case self::Private:
                return '非公開';
                brake;
            case self::Public:
                return '公開';
                brake;
            default:
                return self::getKey($value);
        }
    }

    public static function getValue(string $key)
    {
        switch ($key){
            case '非公開':
                return 0;
            case '公開':
                return 1;
            default:
                return parent::getValue($key);
        }
    }
}
1
2
<p>{{\App\Enums\PublishStateType::getValue('非公開')}}</p> // 0
<p>{{\App\Enums\PublishStateType::getValue('公開')}}</p> // 1

可以用

public static function getvalue覆盖它,为字符串非公開返回0,为公開返回1