Criação de serviço para lista de opções


Na Plataforma Badiu.Net, quando um campo do formulário é do tipo choice, a lista de opções deve ser definida via serviço. Existem três tipos de listas de opções:

  • A lista padrão, como a booleana;
  • A lista gerada a partir do banco de dados;
  • A lista definida em uma classe customizada.

Neste documento, vamos explorar a terceira opção.

Para demonstrar como criar uma classe customizada para gerar a lista de opções, vamos utilizar como exemplo uma funcionalidade já existente no módulo Usuário. A lógica aqui apresentada pode ser aplicada em qualquer outro contexto onde se deseje fazer essa customização.

No módulo Usuário, na funcionalidade de cadastro, o campo passwordstatus (status da senha) é do tipo choice.

A configuração na variável data.form.fields.choicelist é a seguinte:

passwordstatus=s|badiu.system.user.user.form.dataopotions|getPasswordstatus|n

O caractere | é usado como separador de parâmetros. A seguir, explicamos cada um deles:

Primeiro parâmetro

O valor s indica que se trata de um serviço.

Segundo parâmetro

badiu.system.user.user.form.dataopotions é a chave do serviço. Essa chave deve estar registrada no módulo Usuário, no arquivo:

BADIUNET_DIR_INSTALL/Badiu/System/UserBundle/Resources/config/services.yml

Registro do serviço:

badiu.system.user.user.form.dataopotions:
    class: Badiu\System\UserBundle\Model\UserFormDataOptions
    shared: false
    public: true
    arguments: ['@service_container']

A classe correspondente encontra-se em:

BADIUNET_DIR_INSTALL/Badiu/System/UserBundle/Model/UserFormDataOptions.php

Para personalizar, copie essa classe para o seu módulo e adapte conforme necessário.

Terceiro parâmetro

O terceiro parâmetro é o nome da função que irá gerar a lista de opções. No exemplo, é getPasswordstatus:

public function getPasswordstatus() {
    $list = array();
    $list['systemgenerateaut'] = $this->getPasswordstatusLabel('systemgenerateaut');
    $list['forceupdate'] = $this->getPasswordstatusLabel('forceupdate');
    $list['updated'] = $this->getPasswordstatusLabel('updated');
    return $list;
}

Essa função monta a lista de opções invocando a função getPasswordstatusLabel:

public function getPasswordstatusLabel($type) {
    return $this->getTranslator()->trans('badiu.system.user.user.password.status.' . $type);
}

O pacote de idioma correspondente está localizado em:

BADIUNET_DIR_INSTALL/Badiu/System/UserBundle/Resources/translations/messages.pt.yml

Trecho do arquivo:

badiu.system.user.user.password.status.systemgenerateaut: Gerar automaticamente pelo sistema
badiu.system.user.user.password.status.forceupdate: Forçar atualização no próximo login
badiu.system.user.user.password.status.updated: Senha atualizada
badiu.system.user.user.password.status.systemcreated: Senha criada pelo sistema

Quarto parâmetro

O último parâmetro n define o tipo de formatação do array retornado. n significa que não é necessário aplicar formatação. Quando a lista é gerada a partir do banco de dados, utiliza-se o valor y.

Padrão Badiu.Net

Ao customizar, siga os seguintes padrões:

  • Nome da classe:
    • Para uma única classe: CoreFormDataOptions.php
    • Para uma por funcionalidade: NomedafuncionalidadeFormDataOptions.php
  • Chave do serviço: d
    • Deve seguir o padrão do módulo, usando prefixo com core.form.dataopotions.
    • Para uma por funcionalidade: nomedafuniconalidade.core.form.dataopotions.
    •  
  • Internacionalização: organize as strings no pacote de idioma de acordo com o padrão multilíngue.

Seguindo esses padrões, você poderá personalizar os campos do tipo choice nos formulários da Plataforma Badiu.Net de forma estruturada, padronizada e com suporte multilíngue.