Saltar al contenido principal

Módulos

Super Admin → Modules muestra el estado de cualquier módulo personalizado registrado en su instalación de LeadHub.

LeadHub no incluye módulos de funcionalidades integrados — el sistema de módulos es un punto de extensión para desarrolladores que permite añadir nuevas funcionalidades a la plataforma sin modificar el núcleo del código.


¿Qué es el sistema de módulos?

LeadHub utiliza nWidart/laravel-modules para implementar una arquitectura HMVC (Hierarchical Model-View-Controller).

HMVC organiza el código en módulos autocontenidos, cada uno con sus propias rutas, controladores, modelos, vistas, migraciones y proveedor de servicios — esencialmente una mini aplicación Laravel cargada dentro de la aplicación principal. Esto significa:

  • Puede añadir funcionalidades completamente nuevas (nuevas secciones de interfaz, nuevos endpoints de API, nuevos trabajos en segundo plano) sin editar el núcleo.
  • Los módulos pueden habilitarse o deshabilitarse en tiempo de ejecución desde el panel de Super Admin, o mediante modules_statuses.json.
  • Cada módulo tiene versión independiente y puede declarar dependencias de otros módulos.

Instalación (ya incluida en LeadHub)

El paquete ya está instalado y configurado en LeadHub. Para verificarlo:

composer show nwidart/laravel-modules

La configuración del módulo se encuentra en config/modules.php y los módulos se almacenan en Modules/ en la raíz del proyecto.


Creación de su primer módulo

# Generar un nuevo módulo
php artisan module:make MyFeature

# Generar múltiples módulos a la vez
php artisan module:make ModuleA ModuleB ModuleC

# Generar sin archivos de estructura predeterminados (mínimo necesario)
php artisan module:make MyFeature --plain

Después de ejecutar module:make, su módulo se crea en Modules/MyFeature/ y se registra automáticamente.


Estructura del módulo generado

Modules/
MyFeature/
app/
Http/
Controllers/ # Controladores de rutas
Middleware/ # Middleware con alcance de módulo
Requests/ # Clases de solicitud de formulario
Models/ # Modelos Eloquent
Providers/
MyFeatureServiceProvider.php # Proveedor de servicios principal (cargado automáticamente)
RouteServiceProvider.php # Carga routes/web.php + routes/api.php
config/
config.php # Configuración a nivel de módulo
database/
migrations/ # Migraciones del módulo (aisladas del núcleo)
seeders/
factories/
resources/
views/ # Plantillas Blade
lang/ # Cadenas de traducción
assets/ # JS/CSS (compilado mediante Vite)
routes/
web.php # Rutas web (cargadas bajo el grupo de middleware 'web')
api.php # Rutas API (cargadas bajo el grupo de middleware 'api')
tests/ # Pruebas de funcionalidad y unitarias
module.json # Metadatos del módulo y declaración de dependencias
composer.json # Autocarga PSR-4 para el espacio de nombres de este módulo

Descripción de los archivos clave

module.json

Define la identidad del módulo y el orden de carga:

{
"name": "MyFeature",
"alias": "myfeature",
"description": "Adds custom feature X to LeadHub",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\MyFeature\\Providers\\MyFeatureServiceProvider"
],
"requires": []
}
  • priority — controla el orden de carga; un número menor se carga primero. Úselo cuando su módulo dependa de otro.
  • requires — lista de alias de módulos de los que depende este módulo. LeadHub verificará la dependencia antes de cargar.

MyFeatureServiceProvider.php

El punto de entrada de su módulo. Registre rutas, middleware, vistas, traducciones y enlaces aquí. El proveedor generado automáticamente ya invoca RouteServiceProvider y registra las vistas y traducciones del módulo de forma automática.

config/config.php

Configuración a nivel de módulo. Acceda a ella con:

config('myfeature.some_key');

Publique y anule por entorno utilizando la publicación de configuración estándar de Laravel.


Generadores de Artisan más comunes

# Controladores, Modelos, Migraciones
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

Ejecución de migraciones y semillas

Las migraciones de los módulos se mantienen separadas del núcleo. Ejecútelas de forma independiente:

# Migrar todos los módulos
php artisan module:migrate

# Migrar un módulo específico
php artisan module:migrate MyFeature

# Revertir
php artisan module:migrate-rollback MyFeature

# Semilla
php artisan module:seed MyFeature

Habilitación y deshabilitación de módulos

Desde la línea de comandos:

php artisan module:enable MyFeature
php artisan module:disable MyFeature
php artisan module:list # muestra todos los módulos y su estado

Desde Super Admin → Modules: use el interruptor junto a cada módulo registrado.

El estado del módulo se persiste en modules_statuses.json en la raíz del proyecto — confirme este archivo en el control de versiones.


Consideraciones multi-inquilino

LeadHub es multi-inquilino. Al desarrollar módulos, tenga en cuenta:

  • Migraciones con alcance de inquilino: envuelva module:migrate dentro de un contexto de inquilino si su migración crea tablas a nivel de inquilino.
  • Aislamiento del proveedor de servicios: registre middleware, políticas y escuchas de eventos dentro del proveedor de servicios del módulo para evitar contaminar el ámbito global.
  • Control de funcionalidades: combine el interruptor de habilitación/deshabilitación del módulo con el sistema de Planes de LeadHub — deshabilite un módulo globalmente, o restrínjalo a niveles de plan específicos.

Relacionado