Plugins

A Base do Plugin e como Habilitá-lo na Aplicação

Um plugin do Mapas Culturais é uma classe PHP que estende a classe abstrata MapasCulturais\Plugin e precisa implementar ao menos dois métodos: _init e register.

O método _init é onde devem ser utilizados os hooks. O método register é onde deve ser registrado os metadados, controllers, etc.

A classe Plugin deve residir dentro de uma pasta com o mesmo nome de seu namespace e, para que possa ser executado pela aplicação, deve estar na pasta protected/application/plugins.

Abaixo, o exemplo mínimo de um plugin:

Para habilitar o plugin na aplicação é necessário colocá-lo no array de plugins habilitados na configuração da aplicação:

Estrutura de Arquivos e Pastas

Os plugins podem conter as pastas layouts, view, templates, pages e assets, utilizadas quando se deseja sobrescrever algum arquivo do tema ou na implementação de uma nova funcionalidade que contenha alguma visão, parte de template ou asset, etc.

Além dessas cinco pastas, o tema pode conter as pastas Cotrollers, Entities e Repositories para abrigar seus controladores, entidades e repositórios, respectivamente. Ainda, o plugin pode conter um arquivo db-updates.php onde serão escritas as migrações do banco de dados, como criação de tabelas, colunas ou visões.

Configurações de um Plugin

Os plugins podem precisar de configurações, as quais devem ser definidas no __construct da classe do plugin, como no exemplo abaixo, onde são definidas as configurações min_items e max_items com os valores padrão 3 e 10:

Para modificar o valor de uma configuração, deve-se informar na habilitação do plugin, da seguinte maneira:

Utilizando Hooks

Como foi falado na Introdução, através dos hooks, podemos modificar o comportamento padrão da aplicação. É uma das ferramentas mais utilizadas no desenvolvimento de plugins.

Utilizando-se dos hooks, podemos manipular as permissões de um usuário sobre uma entidade, substituir um arquivo de template, criar um getter nas entidades, manipular o retorno do magic getter (em algumas entidades), criar uma rota, executar ação antes ou depois de eventos das entidades (save, insert, update e delete), e dentre muitas outras coisas.

Alguns exemplos:

Registrando Metadados

A classe do plugin herda os seguintes métodos para auxiliar no registro de metadados e devem ser utilizados dentro do método register:

  • registerAgentMetadata;

  • registerEventMetadata;

  • registerOpportunityMetadata;

  • registerProjectMetadata;

  • registerRegistrationMetadata;

  • registerSealMetadata;

  • registerSpaceMetadata;

  • registerUserMetadata.

Exemplo de registro de metadado:

Adicionando um Campo em uma Entidade

Para adicionar o campo de um metadado registrado na página de cadastro de uma entidade, primeiro crie um template part para o campo:

Em seguida, inclua via hook a parte na página da entidade:

Criando um Controlador

Para criar um controlador, primeiro crie a classe na pasta Controllers do plugin:

E, em seguida, registre o controlador na aplicação:

Criando uma Entidade

Para criar uma entidade, deve-se criar a classe na pasta Entities do plugin, definindo todos os atributos e mapeamentos:

Criando uma Tabela

Para criar a tabela para a entidade definida acima, entre no container na pasta /var/www/html/protected/tools e execute o comando ./doctrine orm:schema-tool:update --dump-sql | grep {table} para gerar o SQL de atualização do banco, onde {table} é o nome da tabela definida na classe:

Após obter o SQL, deve-se criar um arquivo db-updates.php:

Execute o script db-update.sh ou reinicie o container:

Criando EntityController para a Entidade Criada

O EntityController deve ter o mesmo nome que a entidade criada, então, crie o arquivo Item.php na pasta Controllers do plugin:

Registre o controlador na aplicação:

Last updated

Was this helpful?