Laravel에서 열거형을 어떻게 사용하나요? 다음 글에서는 Laravel에서 열거형을 사용하는 방법을 소개하겠습니다. 도움이 되길 바랍니다.
저는 최근에 C#을 사용하는 회사에서 enum을 광범위하게 사용하면서 enum을 찾을 수 없을 때 찾는 데 익숙해졌습니다. 그리고 그들을 그리워합니다.
요일, 주문 상태 또는 아래 예와 같이 사용자 유형과 같이 가능한 옵션이 제한된 모든 것에 사용합니다.
열거를 사용하면 여러 가지 이점이 있습니다.
- 숫자를 바꾸거나 잘못 입력하여 발생하는 오류를 줄입니다.
- 나중에 값을 쉽게 변경할 수 있습니다.
- 코드를 읽기 쉽게 만들어 버그가 침투할 가능성이 줄어듭니다.
- 향후 호환성 보장 열거형을 사용하면 나중에 누군가가 멤버 이름에 해당하는 값을 변경할 경우 코드가 실패할 가능성을 크게 줄일 수 있습니다.
PHP 자체는 열거형을 지원하지 않지만 클래스에서 상수를 사용하면 동등한 효과를 얻는 것은 매우 쉽습니다. 또한 laravel-enum이라는 Laravel 패키지를 만들었습니다. 이를 통해 키 및 값 나열, 값에 설명 추가, 열거 값이 필요한 요청 유효성 검사와 같은 도우미 기능에 액세스할 수 있습니다.
이 가이드는 사용법 예시와 모범 사례를 포함하여 Laravel 패키지를 설치하는 과정을 안내합니다.
컴포저를 통해 터미널에서 다음 명령을 실행하여 패키지를 설치할 수 있습니다.
$ composer require bensampo/laravel-enum
Laravel 5.5 미만 버전을 사용하는 경우 config에 서비스 공급자를 추가해야 합니다. /app .php
.config/app.php
.
'BenSampo\Enum\EnumServiceProvider'
我们将为用户类型创建一个枚举在我们的示例应用程序中,用户可以属于以下三种用户类型之一:管理员、付费成员、成员。
包中包含用于创建枚举的生成器,因此可以运行以下命令来创建名为UserType的枚举该文件将在“app/Enums/UserType.php”中创建
php artisan make:enum UserType
你将在这个文件中看到一定数量的脚手架。在文件顶部附近,可能的选项列表被定义为常量。这些常量值存储在数据库中,因此我发现最好是使用整数,但是并没有限制一定要使用整数,只要每一个值都是唯一就可以了了。
本例中的选项看起来是这样的:
const Administrator = 0; const PaidMember = 1; const Member = 2;
现在我们有了一个带有一些可能性的枚举,并且可以开始使用它。在迁移 user 表时, 可以添加以下内容。
$table->tinyInteger('type')->unsigned()->default(UserType::Member);
因为 null 不是枚举的选项,我们需要为它设置默认值。在这个例子中,有必要去假设默认情况下的用户将成为标准成员。
确保文件的顶部包含此枚举的 use 语句。
use App\Enums\UserType;
由于我们现在的用户模型具有类型的属性,我们可以对它进行访问,并和 enum 值进行比较。这就是枚举真正的好处,也是我为什么如此喜欢他们。看一下下面的用法示例和可能替代的方法。
if ($user->type === UserType::PaidMember) { // 在这里只是做一些付费会员的事情. }
如果我们不使用枚举,可能会有类似以下的代码:
if ($user->type === 1) { // 这个1表示什么?? // ... } if ($user->type === 'PaidMember') { // 这他妈咋么又是字符串 ? // ... }
使用枚举的第一个例子是最容易读懂并且也是最不容易出错的例子。如果我偶然输入了 UserType::Paidember
(注意拼写错误),我会得到一个很好的错误提示,告诉我代码错误了(类中不存在这个常量值),而不是像前两个示例那样默默的失败。(只是判断不符合条件,你还需要根据当前的条件语句去具体的查看相关代码?)
在应用的某些界面,我们可能希望向用户显示他们所属的用户类型。如果只是简单的输出从数据库所获取的整型值,显然达不到我们想要的结果。相反,可使用每个枚举类所继承基类的 getDescription
方法。
在 blade 模板上的操作如下:
<p>{{ \App\Enums\UserType::getDescription($user->type) }}</p>
输出结果Administrator
(管理员),PaidMember
(付费会员) 、Member
(会员)中的一个。
有时候关键词名称是复合词(就像 PaidMember
),我们想要展示和键名不同的东西。我们可以像下面这样覆盖掉当前枚举的描述。 在 app/Enums/UserType.php
:
public static function getDescription(int $value): string { switch ($value) { case self::PaidMember: return 'Paid member'; break; default: return self::getKey($value); } }
现在当我们调用 getDescription
我们将获取到 Administrator
, Paid member
or Member
public function store(Request $request) { $this->validate($request, [ 'type' => ['required', new EnumValue(UserType::class)], ]); // 保存用户等等... }
use App\Enums\UserType; use BenSampo\Enum\Rules\EnumValue;
UserType::Paidember
를 입력하면(철자 오류 참고) 코드가 잘못되었다는 오류 메시지가 표시됩니다(이 상수 값은 클래스에 존재하지 않습니다). 처음 두 예제는 자동으로 실패합니다. (단지 조건이 충족되지 않았다고 판단하려면 현재 조건문을 기반으로 관련 코드를 구체적으로 확인해야 합니까?)🎜🎜🎜열거 표시🎜🎜🎜애플리케이션의 일부 인터페이스에서는 사용자에게 표시하고 싶을 수도 있습니다. 그들이 속한 사용자 유형. 단순히 데이터베이스에서 얻은 정수값을 출력한다면 당연히 원하는 결과를 얻을 수 없습니다. 대신 각 열거형 클래스가 상속하는 기본 클래스의 getDescription
메서드를 사용하세요. 🎜🎜블레이드 템플릿의 작업은 다음과 같습니다. 🎜rrreee🎜출력 결과는 Administrator
(관리자), PaidMember
(유료 회원), Member입니다. 코드>(회원). 🎜🎜때때로 키워드 이름이 복합어(예: <code>PaidMember
)이고 키 이름과 다른 것을 표시하고 싶을 때가 있습니다. 다음과 같이 현재 열거형 설명을 덮어쓸 수 있습니다. app/Enums/UserType.php
:🎜rrreee🎜이제 getDescription
을 호출하면 Administrator
, Paid member/를 얻게 됩니다. code> 또는 <code>Member
.🎜🎜🎜확인 방법🎜🎜🎜사용자 입력을 통해 열거 값을 수정할 때는 유효한 값만 허용하는지 확인하는 것이 가장 좋습니다. 패키지의 유효성 검사 규칙을 사용할 수 있습니다. 🎜当以表格展示枚举的时候,我经常把他们显示为 HTML select 元素。这样虽仍然可以被恶意修改,但是避免了将错误的值传递给服务器的情况。
继续我们的用户使用示例,让我们在用户控制器中处理修改的值:
public function store(Request $request) { $this->validate($request, [ 'type' => ['required', new EnumValue(UserType::class)], ]); // 保存用户等等... }
记住要同时包含枚举的 use 语句和 EnumValue
的规则。
use App\Enums\UserType; use BenSampo\Enum\Rules\EnumValue;
当然这并不是枚举所能完成的全部范围。但是它覆盖了90%的用例。
值得一看的列表 枚举类上的方法的完整列表 以查看您还能实现什么。
【相关推荐:laravel视频教程】
위 내용은 Laravel에서 열거형을 사용하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!