5.2 KiB
Executable File
Módulo Modelo para o SysCMS (Template)
Este documento define o padrão arquitetural para a criação de novos módulos no SysCMS, utilizando o módulo modelo como referência oficial e template instalável.
Por que o módulo modelo?
O módulo modelo foi criado especificamente para servir de base limpa e padronizada para novos desenvolvimentos. Ele implementa:
- Estrutura MVC Completa: Controllers, Models e Views organizados.
- Instalação Automatizada: Inclui arquivo
.zippronto para teste de instalação via painel. - Independência: Migrations autossuficientes que não quebram se outros módulos estiverem desativados.
- Padrões de Código: Namespace correto, rotas separadas (admin/public) e internacionalização.
O módulo encontra-se em modules/modelo e seu pacote de instalação em modules/modelo/modelo.zip.
Estrutura de Diretórios
Um módulo padrão deve seguir rigorosamente a seguinte estrutura:
modules/
└── [nome-do-modulo]/
├── module.json # Metadados e configurações principais
├── routes/
│ └── web.php # Definição de rotas (Admin e Pública)
├── Providers/
│ └── [Nome]ServiceProvider.php # Registro do módulo no container
├── classes/
│ ├── Controllers/
│ │ ├── [Nome]Controller.php # Controller Admin (protegido)
│ │ └── PublicController.php # Controller Público (aberto)
│ └── Models/
│ └── [Nome].php # Modelo Eloquent
├── database/
│ └── migrations/ # Scripts de banco de dados
│ ├── 001_create_[tabela]_table.php
│ └── 002_insert_[modulo]_module.php
├── locales/ # Arquivos de tradução
│ ├── pt_BR/
│ ├── en_US/
│ └── [outros_idiomas]/
└── views/ # Templates Twig
├── admin/ # Views do painel administrativo
└── public/ # Views do site público
Componentes Essenciais
1. Configuração (module.json)
Arquivo JSON que define a identidade do módulo, suas permissões e dependências.
{
"name": "faq",
"display_name": "FAQ Manager",
"version": "1.1.0",
"permissions": ["faq.view", "faq.manage"],
"providers": ["Modules\\Faq\\Providers\\FaqServiceProvider"],
"routes": {"web": "routes/web.php"},
"views": "views",
"locales": "locales",
"module_public": true
}
2. Rotas (routes/web.php)
Separação clara entre rotas administrativas (protegidas) e públicas.
// Rota Administrativa (Protegida por Middleware e Permissões no Controller)
$app->addRoute('GET', '/admin/faq', [\Modules\Faq\Controllers\FaqController::class, 'index']);
// Rota Pública
$app->addRoute('GET', '/faq', [\Modules\Faq\Controllers\PublicController::class, 'index']);
3. Service Provider (Providers/FaqServiceProvider.php)
Responsável por registrar as views, traduções e configurações do módulo no boot do sistema.
4. Controllers
-
Admin (
FaqController.php):- Herda de
BaseAdminController. - Verifica permissões (
$user->hasPermission('faq.view')). - Gerencia CRUD (Create, Read, Update, Delete).
- Renderiza views admin (
@faq/admin/index.twig).
- Herda de
-
Público (
PublicController.php):- Herda de
BaseController. - Consulta dados públicos (
faqs_visibility = 'public'). - Renderiza views públicas (
@faq/public/index.twig).
- Herda de
5. Migrations
- Criação da Tabela: Define a estrutura de dados (ex:
faqs_id,faqs_question,faqs_bus_id). - Registro do Módulo: Insere o registro na tabela
modulespara que o sistema reconheça o novo componente.
6. Views (Twig)
- Admin: Estende
layouts/dashboard.twig. Usa componentes Bootstrap e alertas do sistema. - Público: Estende
layouts/base.twig. Foca na apresentação do conteúdo para o visitante.
Guia para Criar um Novo Módulo
Para criar um novo módulo usando o faq como base:
- Copie a pasta
modules/faqe renomeie para o novo nome (ex:news). - Edite o
module.json:- Atualize
name,display_nameeproviders. - Defina as novas permissões (ex:
news.view).
- Atualize
- Renomeie e Refatore as Classes:
FaqController->NewsController.FaqServiceProvider->NewsServiceProvider.Faq(Model) ->News.- Atualize os
namespaceem todos os arquivos PHP.
- Atualize as Rotas:
- Em
routes/web.php, aponte para os novos controllers.
- Em
- Ajuste as Migrations:
- Renomeie os arquivos e as tabelas dentro deles.
- Traduções:
- Atualize os arquivos em
locales/com as chaves do novo módulo.
- Atualize os arquivos em
- Instalação:
- O instalador de módulos detectará o novo
module.jsone executará as migrações automaticamente.
- O instalador de módulos detectará o novo
Documento gerado para orientação de desenvolvimento no SysCMS.