Laravel で Enum (with BenSampo/laravel-enum)
はじめに
BenSampo/laravel-enum を利用して、Laravel で Enum を使う方法を整理した。
※機能が豊富なので、自分が使った範囲のみ。
TL;DR
- ローカライゼーションやバリデーションが簡単に実現できる
<select>のオプションもtoSelectArray()で簡単に設定できる- 他にも機能がいっぱいある
目次
環境・条件
1 | $ sw_vers |
詳細
セットアップ
composer でインストール
1 | $ composer require bensampo/laravel-enum |
config/app.php に追加
1 | 'providers' => [ |
Enum 作成
php artisan make:enum で Enum を作成できる。
1 | $ php artisan make:enum UserType |
app/Enums/UserType.php が生成されるので、適当に使いたい値を編集。
1 |
|
これで UserType::Administrator が 0、UserType::GeneralUser が 1 という感じで扱えるようになる。
Localization
ローカライゼーション(日本語で表示)したい場合は implements LocalizedEnum を追加
1 | <?php |
config/app.php の locale を ja に変更。
1 | 'locale' => 'ja', |
翻訳ファイルとして resources/lang/ja/enums.php を作成し、対応する内容を設定。
1 |
|
値→説明文
getDescription() で説明文が取得できるが、Localization していると locale に合った内容が出力される。
1 | // locale = 'en' の場合 |
blade.php 内で表示するときも、以下のように getDescription() を使う。
1 | {{ App\Enums\UserType::getDescription($request->user_type) }} |
モデルのキャスト
モデル内で CastsEnums を使うことで、自動でキャストしてくれるようになる(っぽい)
1 | +use BenSampo\Enum\Traits\CastsEnums; |
キャストされている場合、key, value, description が利用可能。
参考: Instance Properties
1 | $user->user_type->key; |
セレクトボックスのオプション
<select> に使いたいときは toSelectArray() を使う。
1 | {{ Form::select( |
これで以下の HTML になる。ここも Localization していると、locale に合った内容になる。
1 | <select> |
バリデーション
バリデーションは enum_value などが使える。
HTML フォームだと数値も文字列扱いになるので、要件に応じて ',false' を付けて restrict = false としておく。
1 | 'user_type' => [ |
まとめ
- ローカライゼーションやバリデーションが簡単に実現できる
<select>のオプションもtoSelectArray()で簡単に設定できる- 他にも機能がいっぱいある
その他・メモ
他にも機能が色々とあるので、気が向いたら追記なり別記事作成なりするかも。
参考文献
- BenSampo/laravel-enum: Simple, extensible and powerful enumeration implementation for Laravel.
- Laravel-enumの使い方 - Qiita
- laravel-enumを使ってみたら快適だった | RE:ENGINES
- LaravelにてEnumを導入する
関連記事
- Laravel で現在の URL 取得方法まとめ
- Laravel で Cookie を使う(参照/設定/削除)
- Laravel で PDF ファイルをブラウザで開く
- Laravel で withCount と having を使って絞り込み
- Laravel で「開始日時 < 終了日時」であることをバリデーションする
- Laravel で生 SQL を実行
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア