Clases del Kernel de XOOPS
El Kernel de XOOPS proporciona el marco fundamental para el bootstrapping del sistema, gestión de configuraciones, manejo de eventos del sistema y proporciona utilidades principales. Estas clases forman la base de la aplicación XOOPS.
Arquitectura del Sistema
Sección titulada «Arquitectura del Sistema»graph TD A[XoopsKernel] -->|initializes| B[Configuration Manager] A -->|manages| C[Service Container] A -->|handles| D[System Hooks] A -->|registers| E[Core Services]
B -->|loads| F[config.php] B -->|manages| G[Module Configs]
C -->|contains| H[Database] C -->|contains| I[Logger] C -->|contains| J[Template Engine] C -->|contains| K[Module Manager]
E -->|registers| L[User Service] E -->|registers| M[Module Service] E -->|registers| N[Database Service]Clase XoopsKernel
Sección titulada «Clase XoopsKernel»La clase del kernel principal que inicializa y gestiona el sistema XOOPS.
Descripción General de la Clase
Sección titulada «Descripción General de la Clase»namespace Xoops;
class XoopsKernel{ private static ?XoopsKernel $instance = null; protected ServiceContainer $services; protected ConfigurationManager $config; protected array $modules = []; protected bool $isLoaded = false;}Constructor
Sección titulada «Constructor»private function __construct()El constructor privado refuerza el patrón singleton.
getInstance
Sección titulada «getInstance»Obtiene la instancia única del kernel.
public static function getInstance(): XoopsKernelRetorna: XoopsKernel - La instancia única del kernel
Ejemplo:
$kernel = XoopsKernel::getInstance();Proceso de Arranque
Sección titulada «Proceso de Arranque»El proceso de arranque del kernel sigue estos pasos:
- Inicialización - Establecer controladores de errores, definir constantes
- Configuración - Cargar archivos de configuración
- Registro de Servicios - Registrar servicios principales
- Detección de Módulos - Escanear e identificar módulos activos
- Inicialización de Base de Datos - Conectar a la base de datos
- Limpieza - Preparar para el manejo de solicitudes
public function boot(): voidEjemplo:
$kernel = XoopsKernel::getInstance();$kernel->boot();Métodos del Contenedor de Servicios
Sección titulada «Métodos del Contenedor de Servicios»registerService
Sección titulada «registerService»Registra un servicio en el contenedor de servicios.
public function registerService( string $name, callable|object $definition): voidParámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
$name | string | Identificador del servicio |
$definition | callable|object | Factory del servicio o instancia |
Ejemplo:
$kernel->registerService('custom.handler', function($c) { return new CustomHandler();});getService
Sección titulada «getService»Obtiene un servicio registrado.
public function getService(string $name): mixedParámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
$name | string | Identificador del servicio |
Retorna: mixed - El servicio solicitado
Ejemplo:
$database = $kernel->getService('database');$logger = $kernel->getService('logger');hasService
Sección titulada «hasService»Verifica si un servicio está registrado.
public function hasService(string $name): boolEjemplo:
if ($kernel->hasService('cache')) { $cache = $kernel->getService('cache');}Gestor de Configuración
Sección titulada «Gestor de Configuración»Gestiona la configuración de la aplicación y la configuración de módulos.
Vista General de la Clase
Sección titulada «Vista General de la Clase»namespace Xoops\Core;
class ConfigurationManager{ protected array $config = []; protected array $defaults = []; protected string $configPath;}Métodos
Sección titulada «Métodos»Carga la configuración desde un archivo o array.
public function load(string|array $source): voidParámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
$source | string|array | Ruta del archivo de config o array |
Ejemplo:
$config = $kernel->getService('config');$config->load(XOOPS_ROOT_PATH . '/include/config.php');$config->load(['sitename' => 'Mi Sitio', 'admin_email' => 'admin@example.com']);Obtiene un valor de configuración.
public function get(string $key, mixed $default = null): mixedParámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
$key | string | Clave de configuración (notación punto) |
$default | mixed | Valor por defecto si no se encuentra |
Retorna: mixed - Valor de configuración
Ejemplo:
$siteName = $config->get('sitename');$adminEmail = $config->get('admin.email', 'admin@example.com');Establece un valor de configuración.
public function set(string $key, mixed $value): voidParámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
$key | string | Clave de configuración |
$value | mixed | Valor de configuración |
Ejemplo:
$config->set('sitename', 'Nombre Nuevo del Sitio');$config->set('features.cache_enabled', true);getModuleConfig
Sección titulada «getModuleConfig»Obtiene la configuración de un módulo específico.
public function getModuleConfig( string $moduleName): arrayParámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
$moduleName | string | Nombre del directorio del módulo |
Retorna: array - Array de configuración del módulo
Ejemplo:
$publisherConfig = $config->getModuleConfig('publisher');Hooks del Sistema
Sección titulada «Hooks del Sistema»Los hooks del sistema permiten a los módulos y plugins ejecutar código en puntos específicos del ciclo de vida de la aplicación.
Clase HookManager
Sección titulada «Clase HookManager»namespace Xoops\Core;
class HookManager{ protected array $hooks = []; protected array $listeners = [];}Métodos
Sección titulada «Métodos»addHook
Sección titulada «addHook»Registra un punto de hook.
public function addHook(string $name): voidParámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
$name | string | Identificador del hook |
Ejemplo:
$hooks = $kernel->getService('hooks');$hooks->addHook('system.startup');$hooks->addHook('user.login');$hooks->addHook('module.install');Adjunta un listener a un hook.
public function listen( string $hookName, callable $callback, int $priority = 10): voidParámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
$hookName | string | Identificador del hook |
$callback | callable | Función a ejecutar |
$priority | int | Prioridad de ejecución (mayor se ejecuta primero) |
Ejemplo:
$hooks->listen('user.login', function($user) { error_log('Usuario ' . $user->uname . ' inició sesión');}, 10);
$hooks->listen('module.install', function($module) { // Lógica personalizada de instalación de módulo echo "Instalando " . $module->getName();}, 5);trigger
Sección titulada «trigger»Ejecuta todos los listeners para un hook.
public function trigger( string $hookName, mixed $arguments = null): arrayParámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
$hookName | string | Identificador del hook |
$arguments | mixed | Datos a pasar a los listeners |
Retorna: array - Resultados de todos los listeners
Ejemplo:
$results = $hooks->trigger('system.startup');$results = $hooks->trigger('user.created', $newUser);Vista General de Servicios Principales
Sección titulada «Vista General de Servicios Principales»El kernel registra varios servicios principales durante el arranque:
| Servicio | Clase | Propósito |
|---|---|---|
database | XoopsDatabase | Capa de abstracción de base de datos |
config | ConfigurationManager | Gestión de configuración |
logger | Logger | Registro de aplicación |
template | XoopsTpl | Motor de plantillas |
user | UserManager | Servicio de gestión de usuarios |
module | ModuleManager | Gestión de módulos |
cache | CacheManager | Capa de caché |
hooks | HookManager | Hooks de eventos del sistema |
Ejemplo de Uso Completo
Sección titulada «Ejemplo de Uso Completo»<?php/** * Proceso de arranque de módulo personalizado usando kernel */
// Obtener instancia del kernel$kernel = XoopsKernel::getInstance();
// Arrancar el sistema$kernel->boot();
// Obtener servicios$config = $kernel->getService('config');$database = $kernel->getService('database');$logger = $kernel->getService('logger');$hooks = $kernel->getService('hooks');
// Acceder a configuración$siteName = $config->get('sitename');$adminEmail = $config->get('admin.email');
// Registrar hooks específicos del módulo$hooks->listen('user.login', function($user) { // Registrar inicio de sesión del usuario $logger->info('Inicio de sesión del usuario: ' . $user->uname);
// Rastrear en base de datos $database->query( 'INSERT INTO ' . $database->prefix('event_log') . ' (type, user_id, message, timestamp) VALUES (?, ?, ?, ?)', ['login', $user->uid(), 'Inicio de sesión de usuario', time()] );});
$hooks->listen('module.install', function($module) { $logger->info('Módulo instalado: ' . $module->getName());});
// Disparar hooks$hooks->trigger('system.startup');
// Usar servicio de base de datos$result = $database->query( 'SELECT * FROM ' . $database->prefix('users') . ' LIMIT 10');
while ($row = $database->fetchArray($result)) { echo "Usuario: " . htmlspecialchars($row['uname']) . "\n";}
// Registrar servicio personalizado$kernel->registerService('custom.repository', function($c) { return new CustomRepository($c->getService('database'));});
// Acceder más tarde a servicio personalizado$repo = $kernel->getService('custom.repository');Constantes Principales
Sección titulada «Constantes Principales»El kernel define varias constantes importantes durante el arranque:
// Rutas del sistemadefine('XOOPS_ROOT_PATH', '/var/www/xoops');define('XOOPS_HTDOCS_PATH', XOOPS_ROOT_PATH . '/htdocs');define('XOOPS_MODULES_PATH', XOOPS_ROOT_PATH . '/htdocs/modules');define('XOOPS_THEMES_PATH', XOOPS_ROOT_PATH . '/htdocs/themes');
// Rutas webdefine('XOOPS_URL', 'http://example.com');define('XOOPS_HTDOCS_URL', XOOPS_URL . '/htdocs');
// Base de datosdefine('XOOPS_DB_PREFIX', 'xoops_');Manejo de Errores
Sección titulada «Manejo de Errores»El kernel configura controladores de errores durante el arranque:
// Establecer controlador de errores personalizadoset_error_handler(function($errno, $errstr, $errfile, $errline) { $kernel->getService('logger')->error( "Error: $errstr en $errfile:$errline" );});
// Establecer controlador de excepcionesset_exception_handler(function($exception) { $kernel->getService('logger')->critical( "Excepción: " . $exception->getMessage() );});Mejores Prácticas
Sección titulada «Mejores Prácticas»- Arranque Único - Llamar a
boot()solo una vez durante el inicio de la aplicación - Usar Contenedor de Servicios - Registrar y obtener servicios a través del kernel
- Manejar Hooks Temprano - Registrar listeners de hooks antes de dispararlos
- Registrar Eventos Importantes - Usar el servicio logger para depuración
- Cachear Configuración - Cargar config una vez y reutilizar
- Manejo de Errores - Siempre configurar controladores de errores antes de procesar solicitudes
Documentación Relacionada
Sección titulada «Documentación Relacionada»- ../Module/Module-System - Sistema de módulos y ciclo de vida
- ../Template/Template-System - Integración del motor de plantillas
- ../User/User-System - Autenticación y gestión de usuarios
- ../Database/XoopsDatabase - Capa de base de datos
Ver también: Código Fuente del Kernel XOOPS