Laravel에서 열거형을 사용하는 방법에 대해 이야기해 보겠습니다.

青灯夜游
풀어 주다: 2022-09-21 20:35:14
앞으로
2166명이 탐색했습니다.

Laravel에서 열거형을 어떻게 사용하나요? 다음 글에서는 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 我们将获取到 AdministratorPaid member or Member

public function store(Request $request)
{
    $this->validate($request, [
        'type' => ['required', new EnumValue(UserType::class)],
    ]);

    // 保存用户等等...
}
로그인 후 복사
로그인 후 복사

첫 번째 열거 만들기

사용자 유형에 대한 열거를 만듭니다. 샘플 애플리케이션에서 사용자는 관리자, 유료의 세 가지 사용자 유형 중 하나에 속할 수 있습니다. 회원, 회원.

패키지는 열거형 생성을 위한 생성기를 포함하므로 다음 명령을 실행하여 UserType이라는 열거형을 생성할 수 있습니다. 파일은 "app/Enums/UserType.php"에 생성됩니다. 🎜
use App\Enums\UserType;
use BenSampo\Enum\Rules\EnumValue;
로그인 후 복사
로그인 후 복사
🎜 이 파일에 열거형을 생성합니다. 어느 정도의 비계가 보였습니다. 파일 상단 근처에 가능한 옵션 목록이 상수로 정의되어 있습니다. 이러한 상수 값은 데이터베이스에 저장되므로 정수를 사용하는 것이 가장 좋다고 생각했지만, 각 값이 고유한 한 정수 사용에 제한은 없습니다. 🎜🎜이 예제의 옵션은 다음과 같습니다. 🎜rrreee🎜🎜데이터베이스에 값 저장🎜🎜🎜이제 몇 가지 가능성이 있는 열거형이 있으므로 이를 사용할 수 있습니다. 사용자 테이블을 마이그레이션할 때 다음을 추가할 수 있습니다. 🎜rrreee🎜null은 열거형의 옵션이 아니므로 기본값을 설정해야 합니다. 이 예에서는 기본 사용자가 표준 회원이 된다고 가정해야 합니다. 🎜🎜파일 상단에 이 열거형에 대한 사용 설명을 포함해야 합니다. 🎜rrreee🎜🎜작업에 열거형 사용🎜🎜🎜이제 사용자 모델에 형식화된 속성이 있으므로 이에 액세스하여 열거형 값과 비교할 수 있습니다. 이것이 열거형의 진정한 이점이며 내가 열거형을 그토록 좋아하는 이유입니다. 아래에서 사용 예와 가능한 대안을 살펴보세요. 🎜rrreee🎜열거형을 사용하지 않았다면 다음과 유사한 코드가 있을 수 있습니다. 🎜rrreee🎜열거형을 사용한 첫 번째 예는 읽기가 가장 쉽고 오류 발생 가능성이 가장 낮습니다. 실수로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!