Los módulos de código de Codeigniter son herramientas que sirven para ayudarlo a crear código reutilizable. Los módulos generalmente se centran en un tema específico y se pueden considerar como miniaplicaciones dentro de su aplicación más grande. Se admite cualquiera de los tipos de archivos estándar dentro del marco, como controladores, modelos, vistas, archivos de configuración, ayudantes, archivos de idioma, etc. Los módulos pueden contener tantos como desee.
Espacios de nombres
El elemento central de la funcionalidad de los módulos proviene de la carga automática compatible con PSR-4 que usa CodeIgniter. Si bien cualquier código puede usar el autocargador PSR-4 y los espacios de nombres, la forma principal de aprovechar al máximo los módulos es crear un espacio de nombres en el código y agregarlo a app/Config/Autoload.php en la sección.
Por ejemplo, digamos que queremos mantener un módulo de blog simple que podamos reutilizar entre aplicaciones. Podríamos crear una carpeta con el nombre de nuestra empresa, Acme, para almacenar todos nuestros módulos dentro. Lo colocaremos junto a nuestro directorio de aplicaciones en la raíz principal del proyecto:
/acme // New modules directory
/app
/public
/system
/tests
/writable
Abra app/Config/Autoload.php y agregue el Acme\Blogespacio de nombres a la propiedad de la matriz:
<?php
namespace Config;
use CodeIgniter\Config\AutoloadConfig;
class Autoload extends AutoloadConfig
{
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom namespace
‘Config’ => APPPATH . ‘Config’,
‘Acme\Blog’ => ROOTPATH . ‘acme/Blog’,
];
// …
}
Seguimiento del procedimiento
Ahora que esto está configurado, podemos acceder a cualquier archivo dentro de la carpeta acme/Blog a través del espacio de Acme\Blog nombres. Esto solo se ocupa del 80% de lo que se necesita para que los módulos funcionen, por lo que debe asegurarse de familiarizarse con los espacios de nombres y sentirse cómodo con su uso. Se escanearán automáticamente varios tipos de archivos a través de todos los espacios de nombres definidos, un ingrediente crucial para trabajar con módulos. Una estructura de directorio común dentro de un módulo imitará la carpeta principal de la aplicación:
/acme
/Blog
/Config
/Controllers
/Database
/Migrations
/Seeds
/Helpers
/Language
/en
/Libraries
/Models
/Views
Por supuesto, no hay nada que te obligue a usar esta estructura exacta, y debes organizarla de la manera que mejor se adapte a tu módulo, dejando fuera directorios que no necesites, creando nuevos directorios para Entidades, Interfaces o Repositorios, etc.
Carga automática de archivos que no son de clase
La mayoría de las veces, su módulo no contendrá solo clases de PHP, sino también otras, como funciones de procedimiento, archivos de arranque, archivos de constantes de módulos, etc., que normalmente no se cargan de la forma en que se cargan las clases.
Un enfoque para esto es usar require-ing el (los) archivo (s) al comienzo del archivo donde se usaría. Otro enfoque proporcionado por CodeIgniter es cargar automáticamente estos archivos que no son de clase, como si cargara automáticamente sus clases. Todo lo que tenemos que hacer es proporcionar la lista de rutas a esos archivos e incluirlos en la $files propiedad de su archivo app/Config/Autoload.php.
<?php
namespace Config;
use CodeIgniter\Config\AutoloadConfig;
class Autoload extends AutoloadConfig
{
// …
public $files = [
‘path/to/my/functions.php’,
‘path/to/my/constants.php’,
‘path/to/my/bootstrap.php’,
];
// …
}
Descubrimiento automático
Muchas veces, deberá especificar el espacio de nombres completo para los archivos que desea incluir, pero CodeIgniter se puede configurar para simplificar la integración de módulos en sus aplicaciones al descubrir automáticamente muchos tipos de archivos diferentes, que incluyen:
- Eventos
- registradores
- Archivos de ruta
- Servicios.
Esto se configura en el archivo app/Config/Modules.php . El sistema de detección automática funciona escaneando directorios y archivos particulares dentro de los espacios de nombres psr4 que se han definido en Config/Autoload.php. El proceso de descubrimiento buscaría elementos detectables en esa ruta y debería, por ejemplo, encontrar el archivo de rutas en /acme/Blog/Config/Routes.php.
Habilitar/Deshabilitar Descubrir
Puede activar o desactivar todo el descubrimiento automático en el sistema con la $enabledvariable de clase. False deshabilitará todo el descubrimiento, optimizando el rendimiento, pero negando las capacidades especiales de sus módulos.
Especificar elementos de detección
Con la $aliases opción, puede especificar qué elementos se descubren automáticamente. Si el elemento no está presente, entonces no se realizará el descubrimiento automático para ese elemento, pero los demás en la matriz aún se descubrirán.
Descubrimiento y Compositor
Los paquetes instalados a través de Composer con espacios de nombres PSR-4 también se detectarán de forma predeterminada. Los paquetes con espacio de nombres PSR-0 no se detectarán. Si no desea que se analicen todos los directorios conocidos de Composer al ubicar archivos, puede desactivarlo editando la $discoverInComposer variable en Config\Modules.php:
<?php
namespace Config;
use CodeIgniter\Modules\Modules as BaseModules;
class Modules extends BaseModules
{
public $discoverInComposer = false;
// ...
}
Trabajar con archivos
Esta sección analizará cada uno de los tipos de archivos (controladores, vistas, archivos de idioma, etc.) y cómo se pueden usar dentro del módulo. Parte de esta información se describe con más detalle en la ubicación correspondiente de la guía del usuario, pero se reproduce aquí para que sea más fácil comprender cómo encajan todas las piezas.
Rutas
De manera predeterminada, las rutas se escanean automáticamente dentro de los módulos. Se puede desactivar en el archivo de configuración de Módulos , descrito anteriormente. Cuando se trabaja con módulos, puede ser un problema si las rutas de la aplicación contienen comodines. En ese caso, consulte Prioridad de ruta .
Filtros
De manera predeterminada, los filtros se escanean automáticamente dentro de los módulos. Se puede desactivar en el archivo de configuración de Módulos , descrito anteriormente. En el archivo Config/Filters.php del módulo , debe definir los alias de los filtros que utiliza:
<?php
$filters->aliases['menus'] = MenusFilter::class;
Controladores
Los controladores fuera de la aplicación principal/ directorio de controladores no se pueden enrutar automáticamente mediante la detección de URI, pero deben especificarse dentro del propio archivo de rutas:
<?php
// Routes.php
$routes->get('blog', 'Acme\Blog\Controllers\Blog::index');
Para reducir la cantidad de escritura necesaria aquí, la función de enrutamiento de grupo es útil:
<?php
$routes->group('blog', ['namespace' => 'Acme\Blog\Controllers'], static function ($routes) {
$routes->get('/', 'Blog::index');
});
Archivos de configuración
No se necesita ningún cambio especial cuando se trabaja con archivos de configuración. Estas siguen siendo clases con espacio de nombres y se cargan con el new comando:
<?php
$config = new \Acme\Blog\Config\Blog();
Los archivos de configuración se descubren automáticamente cada vez que se usa la función que siempre está disponible.
Migraciones
Los archivos de migración se descubrirán automáticamente dentro de los espacios de nombres definidos. Todas las migraciones encontradas en todos los espacios de nombres se ejecutarán cada vez.
Semillas
Los archivos semilla se pueden usar tanto desde la CLI como desde otros archivos semilla siempre que se proporcione el espacio de nombres completo. Si llama a la CLI, deberá proporcionar barras invertidas dobles:
ons seed Acme\\Blog\\Database\\Seeds\\TestPostSeeder
Ayudantes
Los ayudantes se ubicarán automáticamente desde los espacios de nombres definidos al usar el helper() método, siempre que esté dentro del directorio de ayudantes de espacios de nombres :
<?php
helper('blog');
Archivos de lenguaje
Los archivos de idioma se ubican automáticamente desde espacios de nombres definidos cuando se usa el método, siempre que el archivo siga las mismas estructuras de directorio que el directorio principal de la aplicación.
Bibliotecas
Las bibliotecas siempre se instancian por su nombre de clase completo, por lo que no se proporciona ningún acceso especial:
<?php
$lib = new \Acme\Blog\Libraries\BlogLib();
Modelos
Los modelos siempre se instancian por su nombre de clase completo, por lo que no se proporciona ningún acceso especial
<?php
$model = new \Acme\Blog\Models\PostModel();
Puntos de vista
Las vistas se pueden cargar usando el espacio de nombres de la clase como se describe en la documentación de las vistas :
<?php
echo view('Acme\Blog\Views\index');
Gestión de sus aplicaciones
De forma predeterminada, se supone que solo tiene la intención de usar CodeIgniter para administrar una aplicación, que construirá en su directorio de aplicaciones . Sin embargo, es posible tener múltiples conjuntos de aplicaciones que comparten una sola instalación de CodeIgniter, o incluso cambiar el nombre o reubicar el directorio de su aplicación. Cuando instaló CodeIgniter v4.1.9 o anterior, y si hay espacios App\de Config\ nombres en sus como /composer.json los autoload.psr-4 siguientes, debe eliminar estas líneas y ejecutar .composer dump-autoload
{
...
"autoload": {
"psr-4": {
"App\\": "app", <-- Remove this line
"Config\\": "app/Config" <-- Remove this line
}
},
...
}
Cambio de nombre o reubicación del directorio de aplicaciones
Si desea cambiar el nombre del directorio de su aplicación o incluso moverlo a una ubicación diferente en su servidor, que no sea la raíz de su proyecto, abra su aplicación principal/Config/Paths.php y establezca una ruta completa del servidor en la $appDirectoryvariable (alrededor de la línea 44):
<?php
namespace Config;
class Paths
{
// ...
public $appDirectory = '/path/to/your/app';
// ...
}
Deberá modificar dos archivos adicionales en la raíz de su proyecto, para que puedan encontrar el archivo de configuración de Paths:
- /spark ejecuta aplicaciones de línea de comandos.
<?php
require FCPATH . '../app/Config/Paths.php';
// ^^^ Change this line if you move your application folder
- /public/index.php es el controlador frontal de su aplicación web.
<?php
require FCPATH . '../app/Config/Paths.php';
// ^^^ Change this line if you move your application folder
Ejecución de múltiples aplicaciones con una instalación de CodeIgniter
Si desea compartir una instalación común del marco CodeIgniter, para administrar varias aplicaciones diferentes, simplemente coloque todos los directorios ubicados dentro del directorio de su aplicación en su propio directorio. Por ejemplo, supongamos que desea crear dos aplicaciones, llamadas foo y bar. Puede estructurar los directorios de su proyecto de aplicación de esta manera:
foo/
app/
public/
tests/
writable/
env
phpunit.xml.dist
spark
bar/
app/
public/
tests/
writable/
env
phpunit.xml.dist
spark
vendor/
autoload.php
codeigniter4/framework/
composer.json
composer.lock
https://aprendeinformaticas.com/ https://codeigniter.com/user_guide/general/managing_apps.html