Posted on: March 16, 2026 01:26 AM
Posted by: Renato
Categories: Laravel
Views: 25
Sweet-Enum: Turbinando Enums no Laravel
Excelente tema para um artigo técnico, especialmente focado em Clean Code e produtividade no ecossistema Laravel.
Turbinando Enums no Laravel 11 com Sweet-Enum
Desde o PHP 8.1, os Enums se tornaram peças fundamentais para substituir constantes mágicas e garantir tipagem forte em nossas aplicações. No entanto, quem trabalha com Laravel sabe que, na hora de exibir esses valores em um formulário (Blade) ou retornar uma API, acabamos escrevendo muitos métodos repetitivos como
label() ou
description().
Para resolver isso de forma elegante, a biblioteca
leocello/sweet-enum
surge como uma solução baseada em PHP Attributes, trazendo metadados diretamente para a definição do Enum.
O Problema: O "Verbosismo" dos Enums Nativos
Sem uma biblioteca auxiliar, para dar uma descrição amigável a um Enum, você terminaria com algo assim:
PHP
enum TypeProductEnum: string {
case PHYSICAL = 'PHYSICAL';
case DIGITAL = 'DIGITAL';
public function description(): string {
return match(this) {
self::PHYSICAL => 'Produto Físico',
self::DIGITAL => 'Produto Digital',
};
}
}
Agora imagine repetir isso para 20 Enums diferentes. É aqui que o Sweet-Enum brilha.
A Solução: Metadados com Attributes
Com o sweet-enum, utilizamos o atributo
#[SweetCase]
para injetar informações diretamente nos cases. Veja como o código fica muito mais limpo e declarativo:
PHP
namespace App\Enums;
use Leocello\SweetEnum\{SweetCase, SweetEnum, SweetEnumContract};
enum TypeProductEnum: string implements SweetEnumContract
{
use SweetEnum;
#[SweetCase(description: 'Físico')]
case PHYSICAL = 'PHYSICAL';
#[SweetCase(description: 'Digital')]
case DIGITAL = 'DIGITAL';
}
Por que usar o Sweet-Enum no seu projeto?
O uso dessa biblioteca oferece três vantagens principais para desenvolvedores Laravel:
1. Métodos Utilitários Prontos
Ao usar a trait
SweetEnum,
você ganha acesso imediato a métodos que facilitam a manipulação de dados:
-
TypeProductEnum::descriptions(): Retorna um array associativo['VALOR' => 'Descrição']. -
TypeProductEnum::values(): Retorna apenas os valores puros do Enum. -
TypeProductEnum::PHYSICAL->description(): Acessa a descrição diretamente da instância.
2. Integração Fluida com o Blade
Esquecer de atualizar um
select
no frontend quando um novo case é adicionado no backend é um erro comum. Com esta biblioteca, o seu formulário se torna dinâmico:
HTML
<select name="type" class="form-control">
foreach(TypeProductEnum::descriptions() as value => label)
<option value="(( value ))">(( label ))</option>
endforeach
</select>
3. Suporte a Localização (I18n)
A biblioteca é inteligente o suficiente para buscar as descrições nos arquivos de tradução do Laravel (lang/). Se você definir a descrição como uma chave de tradução, ela fará o __() automaticamente para você.
Conclusão
Manter o código limpo e evitar a repetição de lógica (DRY - Don't Repeat Yourself) é essencial em projetos de longa duração. O leocello/sweet-enum transforma os Enums de simples listas de casos em objetos ricos em contexto, integrando-se perfeitamente às facilidades que o Laravel já nos oferece.
Gostou dessa dica? Se você está arquitetando sistemas em Laravel 11, essa biblioteca é uma daquelas ferramentas "mão na roda" que economizam horas de código boilerplate.
Donate to Site
Renato
Developer