Laravel Enum é uma funcionalidade poderosa que permite representar conjuntos fixos de valores de forma organizada e segura, substituindo o uso de strings soltas no código. Com a introdução dos Enums no PHP 8.1, o Laravel passou a oferecer suporte nativo para utilizar enums em models, validações, formulários e muito mais — tornando o desenvolvimento mais limpo, legível e livre de erros. Neste guia, você vai entender como aplicar Enums de forma prática no seu projeto Laravel e aproveitar todo o seu potencial.
O que são Enums no PHP e no Laravel?
Os Enums (Enumerações) foram introduzidos oficialmente no PHP 8.1 e permitem representar um conjunto fixo e limitado de valores nomeados.
No Laravel, os Enums ajudam a escrever código mais seguro, expressivo e autocompletável, reduzindo o uso de “magic strings” e melhorando a manutenção do sistema.
Por que usar Enums no Laravel?
Imagine um sistema com status de pedido. Em vez de usar strings soltas como ‘pending’, ‘paid’, ‘shipped’, podemos usar:
OrderStatus::PAID
Isso traz:
✅ Tipagem forte
✅ Validação automática
✅ Autocompletar no editor de código
✅ Legibilidade e padronização
Criando um Enum no Laravel
Use o comando Artisan se desejar gerar manualmente:
php artisan make:enum OrderStatus
Em seguida, crie o Enum em app/Enums/OrderStatus.php:
namespace App\Enums;
enum OrderStatus: string
{
case PENDING = 'pending';
case PAID = 'paid';
case SHIPPED = 'shipped';
case CANCELED = 'canceled';
}
Usando o Enum em um Model
Você pode usar Enums diretamente como valores de uma coluna no banco, por exemplo:
use App\Enums\OrderStatus;
$order = Order::create([
'status' => OrderStatus::PAID,
]);
Para funcionar corretamente, é ideal configurar os casts no Model:
use App\Enums\OrderStatus;
class Order extends Model
{
protected $casts = [
'status' => OrderStatus::class,
];
}
Assim, o Laravel converterá automaticamente os valores salvos e recuperados do banco para o Enum OrderStatus.
Verificando e Comparando Enums
if ($order->status === OrderStatus::PAID) {
// Pedido já foi pago
}
Listando Todos os Valores de um Enum
Para listar os valores possíveis:
OrderStatus::cases();
Você pode transformar isso em um array para dropdowns:
foreach (OrderStatus::cases() as $status) {
echo $status->value; // 'paid'
echo $status->name; // 'PAID'
}
Convertendo Enum para Texto Amigável
Crie um método customizado dentro do Enum:
enum OrderStatus: string
{
case PENDING = 'pending';
case PAID = 'paid';
case SHIPPED = 'shipped';
case CANCELED = 'canceled';
public function label(): string
{
return match($this) {
self::PENDING => 'Pendente',
self::PAID => 'Pago',
self::SHIPPED => 'Enviado',
self::CANCELED => 'Cancelado',
};
}
}
Uso:
echo $order->status->label(); // "Pago"
Validando Enum com Form Request
No FormRequest de uma rota:
use App\Enums\OrderStatus;
use Illuminate\Validation\Rules\Enum;
public function rules()
{
return [
'status' => ['required', new Enum(OrderStatus::class)],
];
}
Enum com Front-end (Vue, Blade, etc)
Para popular um select com todos os valores possíveis:
OrderStatus::cases(); // Retorna todos os valores
collect(OrderStatus::cases())->map(function ($status) {
return [
'label' => $status->label(),
'value' => $status->value,
];
});
Usando Enums em Scopes ou Queries
Order::where('status', OrderStatus::PAID)->get();
Laravel Enum vs Spatie Laravel Enum
Se quiser recursos extras como:
- Traduções
- Métodos adicionais
- Facilidade com Blade
Você pode usar o pacote Spatie Laravel Enum:
composer require spatie/enum
Mas em muitos casos, os Enums nativos do PHP 8.1 + Laravel já são mais que suficientes.
Estrutura Recomendada para Enums
Organize suas enums em:
app/
└── Enums/
└── OrderStatus.php
└── UserType.php
└── PaymentMethod.php
Exemplos Comuns de Enums em Projetos Laravel
Contexto | Enum |
---|---|
Status do Pedido | OrderStatus::PAID |
Tipo de Usuário | UserType::ADMIN |
Forma de Pagamento | PaymentMethod::PIX |
Frequência de Assinatura | SubscriptionType::MONTHLY |
Prioridade de Tarefa | TaskPriority::HIGH |
Conclusão
Enums no Laravel são uma ferramenta poderosa para tornar o código mais limpo, seguro e compreensível.
Eles substituem strings soltas, melhoram a legibilidade e reduzem bugs.
Resumo de vantagens:
- Tipagem forte
- Validação simples
- Código mais limpo e sem repetição
- Fácil integração com front-end e bancos de dados
🔥 Construa seus projetos com a melhor infraestrutura e ainda apoie o DevsBrasil!
Na Hostinger, você encontra hospedagem rápida, segura e com suporte top de linha — ideal para desenvolvedores e empreendedores digitais.
💡 Use o nosso link exclusivo do DevsBrasil e garanta:
✅ Descontos especiais nos planos de hospedagem, e-mail profissional, VPS e criador de sites com IA
✅ Ferramentas otimizadas para performance, com ótimo custo-benefício
✅ Apoio direto à nossa comunidade e ao nosso conteúdo gratuito 💚
👉 Acesse agora com nosso link exclusivo e aproveite os benefícios!
Pingback: Estrutura de Pastas Laravel: Guia Completo para Desenvolvedores Iniciantes - Devs Brasil - Dicas para devs