見出し画像

Laravel 学習記録 #003 Enumを学ぶ

LaravelでのEnumについて学習したものをまとめてます。

PHPのEnumとは?

  • 特定のデータ型の値を限定された範囲で列挙したやつ(列挙型)

  • Enumを使用することで、受け入れ可能な値が明確になる
    ->コードの信頼性と安全性を向上させる

  • PHP8.1から追加された

LaravelでEnumを使ってみる

Enumを定義するためのディレクトリとファイルを作成します。
appはいかにEnumsディレクトリを作成し、Role.phpを作成します。
Role.phpを以下のように記述します。

<?php
namespace App\Enums;

enum Role: int // enum 命名: 型
{
	case ADMIN = 1;
	case IPPAN = 2;

	public function label(): string
	{
	  return match ($this) {
		Role::ADMIN => '管理者',
		Role::IPPAN => '一般',
	  };
	}

}

Roleというenumを作成し、caseとして値を設定します。
enumにはメソッドを含めることもできるので、ここでは取得した値からラベル(管理者か一般か)を返すlabelメソッドを用意しました。

取得してみる

case変数名の取得や、値の取得、メソッドの返り値を取得するには下記のようにします。

Enumクラス名::case変数名->name // caseで設定した名前を取得
Enumクラス名::case変数名->value // caseで設定した値を取得
Enumクラス名::case変数名->label() // labelメソッドでcase変数名に対応するラベルを返す
Enumクラス名::from(入力値)->label() // formメソッド->labelメソッドで入力値に対応するラベルを返す

※formメソッドを使うことでcase変数名を入力値から取得することができます。(formメソッドでcase変数名を取得し、それを元にlabelメソッドでラベルを取得)

それでは、コントローラーで取得してみます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Enums\Role;

class EnumController extends Controller
{
    public function index() {

                 // dd(Role::ADMIN->name); // ADMIN
        // dd(Role::ADMIN->value); // 1
        // dd(Role::ADMIN->label()); // 管理者

        // 値から取得したい場合
        dd(Role::from(1)->label()); // 管理者
    }
}

無事に確認できました。

ドロップダウンの値とかラジオボタンの値とか設定する時に使いそうです。
他には、DB操作と連携して使ったりですかね。

いいなと思ったら応援しよう!