Como Criar e Configurar o Enum
Estrutura da Interface
namespace App\Interfaces;
interface FeatureToggleFieldInterface
{
public function visibleFields();
public static function getDynamicFields();
public static function buildJsonStructure(): array;
}
Essa interface define o contrato que os Enums precisam seguir para informar quais campos são visíveis conforme o valor selecionado.
Crie um Enum que implemente FeatureToggleFieldInterface.
Cada caso do Enum representa uma variação do campo controlador (por exemplo, tipo de pessoa, tipo de página, etc).
Exemplo:
namespace App\Enums\Panel;
use App\Interfaces\FeatureToggleFieldInterface;
enum ContentPageTypeEnum: int implements FeatureToggleFieldInterface
{
case PADRAO = 1;
case SERVICOS = 2;
case PRODUTOS = 3;
public function label(): string
{
return match ($this) {
static::PADRAO => 'Padrão',
static::SERVICOS => 'Serviços',
static::PRODUTOS => 'Produtos',
};
}
public function visibleFields(): array
{
return match ($this) {
static::PADRAO => ['parent_page_id'],
static::SERVICOS => [],
static::PRODUTOS => ['parent_page_id'],
};
}
public static function getDynamicFields(): array
{
$allFields = [];
foreach (self::cases() as $case)
$allFields = array_merge($allFields, $case->visibleFields());
return array_values(array_unique($allFields));
}
public static function buildJsonStructure(): array
{
$instances = [];
foreach (self::cases() as $case) {
$instances[$case->value] = [
'visibleFields' => $case->visibleFields()
];
}
return ['instances' => $instances];
}
}
🔍 Importante
-
O método visibleFields() retorna os names dos campos que devem aparecer para cada caso.
-
Se um campo aparece em pelo menos um caso, ele é considerado parte da feature Toggle Field.
-
Campos que não aparecem em nenhum caso são ignorados pelo comportamento da feature.
Nenhum comentário