Módulos
Super Admin → Módulos exibe o status de quaisquer módulos personalizados registrados na sua instalação do LeadHub.
O LeadHub não vem com módulos de funcionalidades integrados — o sistema de módulos é um ponto de extensão para desenvolvedores que permite adicionar novas funcionalidades à plataforma sem modificar o código principal.
O que é o Sistema de Módulos?
O LeadHub utiliza o nWidart/laravel-modules para implementar uma arquitetura HMVC (Hierarchical Model-View-Controller).
O HMVC organiza o código em módulos independentes, cada um com suas próprias rotas, controllers, models, views, migrations e service provider — essencialmente uma mini aplicação Laravel carregada dentro do aplicativo principal. Isso significa que:
- Você pode adicionar funcionalidades completamente novas (novas seções de UI, novos endpoints de API, novos jobs em segundo plano) sem editar o núcleo.
- Os módulos podem ser habilitados ou desabilitados em tempo de execução pelo painel Super Admin, ou via
modules_statuses.json. - Cada módulo é versionado de forma independente e pode declarar dependências de outros módulos.
Instalação (já incluída no LeadHub)
O pacote já está instalado e configurado no LeadHub. Para verificar:
composer show nwidart/laravel-modules
A configuração do módulo está em config/modules.php e os módulos são armazenados em Modules/ na raiz do projeto.
Criando Seu Primeiro Módulo
# Criar um novo módulo
php artisan module:make MyFeature
# Criar múltiplos módulos de uma vez
php artisan module:make ModuleA ModuleB ModuleC
# Criar sem arquivos padrão de boilerplate (mínimo necessário)
php artisan module:make MyFeature --plain
Após executar module:make, seu módulo é criado em Modules/MyFeature/ e registrado automaticamente.
Estrutura Padrão do Módulo
Modules/
MyFeature/
app/
Http/
Controllers/ # Controllers de rotas
Middleware/ # Middleware com escopo do módulo
Requests/ # Classes de form request
Models/ # Models Eloquent
Providers/
MyFeatureServiceProvider.php # Service provider principal (auto-carregado)
RouteServiceProvider.php # Carrega routes/web.php + routes/api.php
config/
config.php # Configuração no nível do módulo
database/
migrations/ # Migrations do módulo (isoladas do núcleo)
seeders/
factories/
resources/
views/ # Templates Blade
lang/ # Strings de tradução
assets/ # JS/CSS (compilados via Vite)
routes/
web.php # Rotas web (carregadas sob o grupo de middleware 'web')
api.php # Rotas de API (carregadas sob o grupo de middleware 'api')
tests/ # Testes de funcionalidade e unitários
module.json # Metadados e declaração de dependências do módulo
composer.json # Autoloading PSR-4 para o namespace deste módulo
Arquivos Principais Explicados
module.json
Define a identidade e a ordem de carregamento do módulo:
{
"name": "MyFeature",
"alias": "myfeature",
"description": "Adds custom feature X to LeadHub",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\MyFeature\\Providers\\MyFeatureServiceProvider"
],
"requires": []
}
priority— controla a ordem de carregamento; número menor carrega primeiro. Use quando seu módulo depende de outro.requires— lista de aliases de módulos dos quais este módulo depende. O LeadHub irá verificar a dependência antes de carregar.
MyFeatureServiceProvider.php
O ponto de entrada do seu módulo. Registre rotas, middleware, views, traduções e bindings aqui. O provider gerado pelo scaffold já chama RouteServiceProvider e registra as views e traduções do módulo automaticamente.
config/config.php
Configuração no nível do módulo. Acesse com:
config('myfeature.some_key');
Publique e sobrescreva por ambiente usando a publicação padrão de configuração do Laravel.
Geradores Artisan Comuns
# Controllers, Models, Migrations
php artisan module:make-controller MyController MyFeature
php artisan module:make-model MyModel MyFeature
php artisan module:make-migration create_my_table MyFeature
# Requests, Middleware, Policies
php artisan module:make-request StoreMyRequest MyFeature
php artisan module:make-middleware CheckSomething MyFeature
php artisan module:make-policy MyPolicy MyFeature
# Jobs, Events, Listeners, Mail
php artisan module:make-job ProcessSomething MyFeature
php artisan module:make-event SomethingHappened MyFeature
php artisan module:make-listener HandleSomething MyFeature
php artisan module:make-mail WelcomeMail MyFeature
# Comandos Artisan
php artisan module:make-command MyCommand MyFeature
Executando Migrations e Seeds
As migrations dos módulos ficam separadas do núcleo. Execute-as de forma independente:
# Migrar todos os módulos
php artisan module:migrate
# Migrar um módulo específico
php artisan module:migrate MyFeature
# Rollback
php artisan module:migrate-rollback MyFeature
# Seed
php artisan module:seed MyFeature
Habilitando e Desabilitando Módulos
Pela linha de comando:
php artisan module:enable MyFeature
php artisan module:disable MyFeature
php artisan module:list # exibe todos os módulos e seus status
Em Super Admin → Módulos: use o botão de alternância ao lado de cada módulo registrado.
O status dos módulos é persistido em modules_statuses.json na raiz do projeto — faça commit deste arquivo no controle de versão.
Considerações Multi-Tenant
O LeadHub é multi-tenant. Ao criar módulos, leve em consideração:
- Migrations com escopo de tenant: execute
module:migratedentro de um contexto de tenant se sua migration criar tabelas no nível do tenant. - Isolamento do Service Provider: registre middleware, policies e event listeners dentro do service provider do módulo para evitar poluir o escopo global.
- Controle de funcionalidades: combine o toggle de habilitar/desabilitar módulo com o sistema de Planos do LeadHub — desabilite um módulo globalmente ou restrinja-o a determinados níveis de plano.
Relacionados
- Planos — controle quais funcionalidades estão disponíveis por nível de assinatura
- Saúde do Sistema — monitore o status de carregamento e erros dos módulos
- Documentação do nWidart/laravel-modules — referência completa do pacote