Criar um módulo local a partir do módulo Test


Neste post, vamos criar um módulo local na estrutura da plataforma Badiu.Net, seguindo o padrão Symfony. Os módulos locais ficam na pasta Badiu/Local/ e servem para adicionar ou personalizar funcionalidades específicas de uma instalação.

Para isso, vamos copiar a estrutura de um módulo chamado Test já existente e, a partir dela, criaremos um novo módulo chamado Agent. Essa mesma lógica pode ser utilizada para criar um módulo do zero, seja ele local ou não.

1. Entendendo o Modelo Base (TestBundle)

A estrutura do módulo de exemplo é:

Badiu/Local/TestBundle/
├── BadiuLocalTestBundle.php
├── Entity/
├── Model/
├── View/
└── Resources/
    ├── config/
    │   ├── services.yml
    │   ├── routing.yml
    │   └── config.yml
    └── translations/
        └── messages.pt.yml

A estrutura acima representa o modelo padrão de um módulo na plataforma Badiu.Net. A seguir, apresentamos a explicação de cada item que compõe essa estrutura.

Pasta / Arquivo Finalidade
BadiuLocalTestBundle.php Arquivo principal do módulo local. O nome Test deve ser substituído pelo nome específico do módulo que está sendo criado (ex.: Agent, User, etc). Esse nome será utilizado como parte do namespace e da identificação do bundle no Symfony
Entity/ Entidades Doctrine 
Model/ Serviços e regras de negócio 
View/ Templates e lógica de exibição (frontend)
Resources/config/services.yml Registro de serviços Symfony
Resources/config/routing.yml Definição das rotas do módulo
Resources/config/config.yml Configurações gerais
Resources/translations/messages.pt.yml Traduções de mensagens da interface

2. Criar o Novo Módulo Agent

Ao criar um novo módulo a partir da cópia de um já existente, é necessário renomear as pastas e os arquivos, substituindo o nome antigo pelo novo em toda a estrutura de diretórios e arquivos.

a) Copiar o Módulo TestBundle

cd Badiu/Local
cp -r TestBundle AgentBundle

b) Renomear arquivos e namespaces

  • Renomeie BadiuLocalTestBundle.php para BadiuLocalAgentBundle.php
  • Atualize o namespace no arquivo:
namespace Badiu\Local\AgentBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class BadiuLocalAgentBundle extends Bundle
{
}

Substitua todos os TestBundle por AgentBundle nos arquivos internos.  É necessário também substituir as chaves e rotas nos arquivos de configuração YAML para adequá-las ao novo padrão de nomenclatura do módulo. Essa substituição deve ser realizada em todos os arquivos localizados na pasta Resources.


3. Ativar o Módulo no Symfony

a) Adicionar no config/bundles.php

Badiu\Local\AgentBundle\BadiuLocalAgentBundle::class => ['all' => true],

b) Adicionar no composer.json

"autoload": {
  "psr-4": {
    "App\\": "src/",
    "Badiu\\Local\\AgentBundle\\": "Badiu/Local/AgentBundle/"
  }
},
"autoload-dev": {
  "psr-4": {
    "Badiu\\Local\\AgentBundle\\": "Badiu/Local/AgentBundle/"
  }
}

d) Adicionar rotas no config/routes.yaml

badiu_local_agent:
  resource: "../Badiu/Local/AgentBundle/Resources/config/routing.yml"
  prefix: /

 

e) Atualizar sistema
Para atualizar o Symfony, execute os seguintes comandos:

composer dump-autoload