Sistema de módulos en CodeIgniter 4

Sistema de módulos en CodeIgniter 4

Observemos cómo montar un sistema de módulos/plugins en una aplicación creada con el FrameWork CodeIgniter 4.

Objetivo

Váis a desarrollar una aplicación con el FrameWork PHP CodeIgniter, y necesitáis ir ampliando vuestra aplicación con módulos. Por un lado, tener el core, y por otro, ir creando módulos para ir añadiéndolos sin tocar el core.

Veremos cómo hacer un sistema de módulos para ir ampliando tu aplicación en CodeIgniter 4.

Código

0. CodeIgniter

Si estáis leyendo este artículo, es que domináis CodeIgniter, o al menos lo conocéis. Ya que bien, sabréis que el árbol del FrameWork es:

/App/
.../Config/
.../Controllers/
.../Models/
.../Views/
...etc
/public/
/system/
/writable/

1. Creamos carpeta Modulos

Ya que nosotros, para nuestro sistema de módulos, vamos a hacer dentro de Aplicación, la carpeta Módulos.

/App/
.../Config/
.../Controllers/
.../Models/
.../Modulos/
.../Views/
...etc
/public/
/system/
/writable/

2. Registramos la carpeta

Una vez construida la carpeta donde iremos almacenando nuestros módulos, vamos a registrar las carpetas para que todo ande.

Deberemos cambiar el fichero Autoload.php de la carpeta /App/Config.

Buscáis la asignación de la variable $psr4, y le añadís la línea donde almacenáis vuestro módulo.

// Fichero /App/Config/Autoload.php public $psr4 = [ APP_NAMESPACE => APPPATH, // For custom app namespace 'Config' => APPPATH . 'Config', 'Modulos\Blog' => APPPATH. 'Modulos/Blog' ];

3. Modificamos Routes

Vamos complicando la cosa. En este momento toca cambiar el fichero /App/Config/Routes.php

En el final del fichero, añadimos el siguiente código. Fijaos que lo que hace es leer todos los Routes de todos los módulos que instalemos… De esta forma, cada módulo, en su carpeta, va a tener su Routes.php especial.

// Fichro /App/Config/Routes.php ... $modules_path = ROOTPATH . 'app/Modules/'; $modules = scandir($modules_path); foreach ($modules as $module) { if ($module === '.' || $module === '..') { continue; } if (is_dir($modules_path) . '/' . $module) { $routes_path = $modules_path . $module . '/Config/Routes.php'; if (file_exists($routes_path)) { require $routes_path; } else { continue; } } }

Después, lo veŕeis más claro cuando veáis la composición de nuestros módulos.

4. Composición Módulo

Observemos cómo estructuraremos todos nuestros módulos conformados.

/* Config */ /App/Modules/Blog/Config/Routes.php /* Controllers */ /App/Modules/Blog/Controllers/BlogController.php /* Models */ /App/Modules/Blog/Models/BlogModel.php /* Views */ /App/Modules/Blog/Views/blogView.php

Al fin y al cabo, es hacer la carpeta con nuestro Módulo, en el ejemplo Blog, y dentro las carpetas Config, Controllers, Models y Views.

5. Los archivos necesarios para el módulo

Y en este momento se encuentra? No. En este momento viene lo difícil, los namespace. Les coloco un caso de muestra muy simple de todos los archivos que les he comentado para que lo tengáis claro:

/App/Modules/Blog/Config/Routes.php

<?php namespace App\Modules\Blog\Models; use CodeIgniter\Model; class BlogModel extends Model { public function __construct() { parent::__construct(); } public function getEntrada($idioma, $id) { return ""; }

/App/Modules/Blog/Controllers/blogController.php

<?php echo "<p>Funciona: ". $text ."</p>"; ?>

Lógicamente, es un fácil ejemplo con todas las partes que puedes necesitar: config, controllers, models y views, pero que, el ejemplo en si, solo redacta un texto por pantalla.

Lo más relevante de estos, es que les quedéis con la composición del módulo, y sobretodo, en los namespace. Si no los declaráis de manera correcta, no les va a funcionar.

Así sólo debemos ir creando nuestros módulos e irlos agregando a la carpeta /App/Modules

Quisiera que les sea de herramienta.

Más información

5/5 - (8 votos)
Índice
  1. Objetivo
  2. Código
    1. 0. CodeIgniter
    2. 1. Creamos carpeta Modulos
    3. 2. Registramos la carpeta
    4. 3. Modificamos Routes
    5. 4. Composición Módulo
    6. 5. Los archivos necesarios para el módulo

Artículos Relacionados

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Usamos cookies para mejorar tu experiencia en nuestra web. Política de Cookies