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
- Para uma única classe:
- 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.
- Deve seguir o padrão do módulo, usando prefixo com
- 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.