概要
php8.1から列挙型(enum)が使える様になりましたね。
今まで定数ファイルに書いていたような事をenumを使って良い感じにしてみます。
実践
ステータスという名目のセレクトボックスを作ります。
- 要件
- 選択肢は「未確定」,「完了」,「キャンセル」
- optionのvalueにはキーが入る様に
- optionのlabelには日本語のステータス名
コード
enum
namespace App\Enums;
enum Statuses: string implements Label
{
case PENDING = 'pending';
case COMPLETE = 'complete';
case CANCEL = 'cancel';
public function labelName(): string
{
return match ($this) {
self::PENDING => '未確定',
self::COMPLETE => '完了',
self::CANCEL => 'キャンセル'
};
}
}
interface
namespace App\Enums;
interface Label
{
public function labelName(): string;
}
blade
<select name="status">
@foreach(\App\Enums\Statuses::cases() as $status)
<option label="{{ $status->labelName() }}" value="{{ $status->value }}"></option>
@endforeach
</select>
生成されるHTML
<select name="status">
<option label="未確定" value="pending"></option>
<option label="完了" value="complete"></option>
<option label="キャンセル" value="cancel"></option>
</select>
列挙型について
公式ドキュメント
ルートモデルバインディングに列挙型で制御をかけられます
指定した属性を列挙型でキャストできます。