LaravelのプロジェクトでEnumを使う機会があったので、簡易ではありますが備忘録としてその機能について綴っていきます
enumとは?簡単な特徴
- 列挙型のこと
- PHP8.1〜から使用可能
- 事前に列挙した固定値を取得できる
- 定義に飛ぶことができる(config()では定義ジャンプ不可なのでここも便利なところ!)
- 無効な型の割り当て防止になる
- boolやfloatは指定できない
- 単一型のみ指定できる(◯string ☓string | int)
enumを使用した経緯
- プロジェクトで、既存DBに登録されていない固定のコード値を複数取り扱う必要があった
- プロジェクトが最新Laravel11での開発であったため、php artisanでenum作成が容易にできること
- 開発者が10名以上いること、また開発リポジトリが複数存在するため、コードの統一性・シンプルかつ可読性を高めることを重視
以上の理由でenumが採用されました。
上記のように、Laravel11では
php artisan make:enum 列挙型(Enum)名
でapp/Enums配下に上記で作成したEnumファイル が簡単に作成されます!
使用例
会員判別用のEnumを作成し、指定した数値と日本語名を活用
1. 会員判別用Enumファイルの作成
php artisan make:enum MemberType
2.作成されたEnumの編集
app/Enums/MemberType
<?php
namespace App\Enums;
/**
* CertificationCategory Enum class
*
*/
enum MemberType: int
{
case MEMBER = 1;
case ASSOCIATE_MEMBER = 2;
case NO_MEMBER = 3;
public function label(): string
{
return match($this) {
self::MEMBER => '会員',
self::ASSOCIATE_MEMBER => '準会員',
self::NO_MEMBER => '非会員',
};
}
}
3-1.基本の使い方
MemberType::from(1)
// MemberType::MEMBER
MemberType::from($member)->label()
// 会員
MemberType::tryFrom(5);
// 存在しない値の場合、tryFromはnullを返す
MemberType::from(5);
// fromはErrorを返す
3-2.ラベル名取得を少し応用
selectタグの選択肢をEnumのラベル名をforeachして表示させます
resource/views/test.blade.php
@php
use App\Enums\MemberType;
@endphp
<select name="member_type">
@foreach (MemberType::cases() as $member)
<option value="{{ $member->value }}">
{{ $member->label() }}
</option>
@endforeach
</select>
結果(※cssの設定等は割愛します)
以上です!