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
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.