Ir para o conteúdo principal

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.