简介
我曾经在Rails中使用Enum进行开发,并且想在Laravel中使用它,所以我进行了检查。
环境
- PHP7.1
- Laravel 5.6
1.什么是枚举?
摘录自Wikipedia
枚举类型(枚举类型)是一种抽象数据类型,它具有程序员选择的每个标识符作为计算机编程中的一个有限集。枚举通常用作没有数字顺序的分类变量,例如卡片套装,但枚举通常在实际编译或运行时实现为整数。每个标识符通常具有不同的整数值,但是可以有意将相同的整数值分配给多个标识符(即,定义别名)。
与使用整数相比,与显式使用幻数相比,枚举还有助于提高程序源的可读性。在某些语言中,枚举的整数表示形式对程序员是隐藏的,这可以防止程序员在算术运算中滥用枚举的值。
在某些
语言中,布尔逻辑类型是预先声明的二进制枚举。
例如,假设您定义类型为
当实际存储在数据库中的值为
2.包装
Laravel有两个可以处理枚举的软件包。
<表格>
tr>
header>
<身体>
tr>
tr>
tbody>
table>
综上所述,似乎没有太大的区别。
当我看到
文档时,以前的
3.简介
1 | $ composer require bensampo/laravel-enum |
使用
作曲家安装后,可以使用
4.试用
如以上示例中所述,我将为
1 | $ php artisan make:enum PublishStateType |
如果执行
或更多,将在
看
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); } } } |
使用
及更高版本,
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 |
但是我想做的是
我想从字符串
中获取常量值
因此,自定义
打开
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 |
可以用