Laravelで列挙型を使用する方法について話しましょう

青灯夜游
リリース: 2022-09-21 20:35:14
転載
2187 人が閲覧しました

Laravel で列挙型を使用するにはどうすればよいですか?次の記事では、Laravel で列挙型を使用する方法を紹介します。

Laravelで列挙型を使用する方法について話しましょう

私は列挙型の大ファンです。最近、C# を使用する会社で働いており、そこでは列挙型が広く使用されており、次のことができることに慣れてきました。 、見つからないときは、見つけて見逃してください。

私は、曜日、注文のステータス、または以下の例のようにユーザー タイプなど、可能なオプションのセットが限られているものに対してこれらを使用します。

列挙型を使用すると、次のような利点があります。

- 転置や間違った数値の入力によるエラーが減少します。

- 将来の値の変更が簡単になります。

- コードが読みやすくなり、バグが入り込む可能性が低くなります。

- 前方互換性の確保 列挙型を使用すると、将来誰かがメンバー名に対応する値を変更した場合にコードが失敗する可能性を大幅に減らすことができます。

PHP 自体は列挙をサポートしていませんが、クラスで定数を使用すると同等の効果を非常に簡単に実現できます。さらに、laravel-enum という Laravel パッケージを作成しました。これにより、キーと値のリスト、値への説明の追加、列挙値を期待するリクエストの検証などのヘルパー関数にアクセスできるようになります。

このガイドでは、使用例とベストプラクティスを含め、Laravel パッケージをインストールするプロセスについて説明します。

インストールパッケージ

composer を介してターミナルで次のコマンドを実行してパッケージをインストールできます:

$ composer require bensampo/laravel-enum
ログイン後にコピー

以下のバージョンの Laravel を使用している場合5.5 バージョンでは、サービス プロバイダーを config/app.php.

'BenSampo\Enum\EnumServiceProvider'
ログイン後にコピー

最初の列挙型を作成します

ユーザー タイプを追加します。列挙の作成 サンプル アプリケーションでは、ユーザーは Admin、Paid Member、Member の 3 つのユーザー タイプのいずれかに属することができます。

パッケージには列挙型を作成するためのジェネレーターが含まれているため、次のコマンドを実行して UserType という名前の列挙型を作成できます。ファイルは "app/Enums/UserType.php" に作成されます

php artisan make:enum UserType
ログイン後にコピー

このファイルには、ある程度の足場が見られます。ファイルの先頭近くで、可能なオプションのリストが定数として定義されています。これらの定数値はデータベースに保存されるため、整数を使用するのが最適であることがわかりましたが、各値が一意である限り、整数の使用に制限はありません。

この例のオプションは次のようになります:

const Administrator = 0;
const PaidMember = 1;
const Member = 2;
ログイン後にコピー

値をデータベースに保存します

これで、可能性の列挙ができたので開始できます。それを使って。ユーザーテーブルを移行する場合、以下を追加できます。

$table->tinyInteger('type')->unsigned()->default(UserType::Member);
ログイン後にコピー

null は列挙型のオプションではないため、デフォルト値を設定する必要があります。この例では、デフォルト ユーザーが標準メンバーになることを想定する必要があります。

ファイルの先頭にこの列挙の use ステートメントが含まれていることを確認してください。

use App\Enums\UserType;
ログイン後にコピー

操作での列挙型の使用

現在のユーザー モデルには type のプロパティがあるため、それにアクセスして列挙値と比較できます。これが enum の本当の利点であり、私が enum を気に入っている理由です。以下の使用例と考えられる代替案をご覧ください。

if ($user->type === UserType::PaidMember) {
    // 在这里只是做一些付费会员的事情.
}
ログイン後にコピー

列挙型を使用しない場合、次のようなコードになる可能性があります。

if ($user->type === 1) { // 这个1表示什么??
    // ...
}

if ($user->type === 'PaidMember') { // 这他妈咋么又是字符串 ?
    // ...
}
ログイン後にコピー

列挙型を使用した最初の例は、最も読みやすく、エラーが発生しにくい例です。 。誤って UserType::Paidember と入力すると (スペルミスに注意してください)、前の「両方」の代わりに、コードが間違っている (この定数値はクラスに存在しない) という素晴らしいエラー メッセージが表示されます。例はサイレントに失敗します。 (条件が満たされていないと判断するために、現在の条件文に基づいて関連するコードを確認する必要もありますか?)

列挙を表示

アプリケーションのインターフェースに応じて、ユーザーに自分がどのユーザー タイプであるかを示したい場合があります。データベースから取得した整数値を単純に出力するだけでは、明らかに望む結果を得ることができません。代わりに、各列挙クラスが継承する基本クラスの getDescription メソッドを使用します。

ブレードテンプレートに対する操作は以下の通りです。

<p>{{ \App\Enums\UserType::getDescription($user->type) }}</p>
ログイン後にコピー

出力結果Administrator(管理者)、PaidMember(有料会員)、 メンバー の 1 人。

キーワード名が複合語 (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有料メンバー # が取得されます。 ## または 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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート