Validar un enum en Laravel

Cómo usar una de las reglas de validación de Laravel junto a los enums introducidos en PHP8.1

Validar un enum en Laravel
Photo by Aaron Burden / Unsplash

Desde PHP8.1, podemos declarar un enum de la siguiente forma:

<?php

namespace App\Enums;

enum ProductStatus: string {
    case DRAFT = 'draft';
    case PUBLISHED = 'published';
    case ARCHIVED = 'archived';
}

Esto nos abre varias nuevas posibilidades cuando usamos Laravel. Una de las más interesantes es su uso en las reglas de validación. Para utilizar nuestros enum en las reglas de validación, podemos hacerlo de la siguiente forma:

<?php

namespace App\Http\Controllers;

use App\Enums\ProductStatus;
use Illuminate\Http\Request;
use Illuminate\Validation\Rules\Enum;

class ProductsController extends Controller
{
    public function store(Request $request)
    {
    	$request->validate([
        	// ...
            'status' => [
            	'required',
                new Enum(ProductStatus::class),
            ],
        ]);
        return view('pages.benefits.index', [
            'benefits' => Benefit::orderBy('name')->get(),
        ]);
    }
}

Así, con esta regla de new Enum(ProductStatus::class), Laravel validará que el parámetro status sea una de las opciones del enum.