XOOPS Класи ядра
Ядро XOOPS забезпечує базову структуру для початкового завантаження системи, керування конфігураціями, обробки системних подій і надання основних утиліт. Ці класи утворюють основу програми XOOPS.
Архітектура системи
Section titled “Архітектура системи”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]Клас ядра Xoops
Section titled “Клас ядра Xoops”Основний клас ядра, який ініціалізує та керує системою XOOPS.
Огляд класу
Section titled “Огляд класу”namespace Xoops;
class XoopsKernel{ private static ?XoopsKernel $instance = null; protected ServiceContainer $services; protected ConfigurationManager $config; protected array $modules = []; protected bool $isLoaded = false;}Конструктор
Section titled “Конструктор”private function __construct()Приватний конструктор застосовує шаблон одного елемента.
getInstance
Section titled “getInstance”Отримує одиночний екземпляр ядра.
public static function getInstance(): XoopsKernelПовертає: XoopsKernel - екземпляр єдиного ядра
Приклад:
$kernel = XoopsKernel::getInstance();Процес завантаження
Section titled “Процес завантаження”Процес завантаження ядра складається з таких кроків:
- Ініціалізація – установіть обробники помилок, визначте константи
- Конфігурація - Завантажте файли конфігурації
- Реєстрація служби - реєстрація основних послуг
- Виявлення модулів - Скануйте та ідентифікуйте активні модулі
- Ініціалізація бази даних - підключення до бази даних
- Очищення - Підготовка до обробки запитів
public function boot(): voidПриклад:
$kernel = XoopsKernel::getInstance();$kernel->boot();Методи контейнера служби
Section titled “Методи контейнера служби”registerService
Section titled “registerService”Реєструє послугу в контейнері послуг.
public function registerService( string $name, callable|object $definition): voidПараметри:
| Параметр | Тип | Опис |
|---|---|---|
$name | рядок | Ідентифікатор послуги |
$definition | викликається|об’єкт | Обслуговування заводу або екземпляра |
Приклад:
$kernel->registerService('custom.handler', function($c) { return new CustomHandler();});getService
Section titled “getService”Отримує зареєстровану службу.
public function getService(string $name): mixedПараметри:
| Параметр | Тип | Опис |
|---|---|---|
$name | рядок | Ідентифікатор послуги |
Повернення: mixed - запитана послуга
Приклад:
$database = $kernel->getService('database');$logger = $kernel->getService('logger');hasService
Section titled “hasService”Перевіряє, чи зареєстрована служба.
public function hasService(string $name): boolПриклад:
if ($kernel->hasService('cache')) { $cache = $kernel->getService('cache');}Менеджер конфігурацій
Section titled “Менеджер конфігурацій”Керує конфігурацією програми та налаштуваннями модулів.
Огляд класу
Section titled “Огляд класу”namespace Xoops\Core;
class ConfigurationManager{ protected array $config = []; protected array $defaults = []; protected string $configPath;}Методи
Section titled “Методи”навантаження
Section titled “навантаження”Завантажує конфігурацію з файлу або масиву.
public function load(string|array $source): voidПараметри:
| Параметр | Тип | Опис |
|---|---|---|
$source | рядок|масив | Шлях до файлу конфігурації або масив |
Приклад:
$config = $kernel->getService('config');$config->load(XOOPS_ROOT_PATH . '/include/config.php');$config->load(['sitename' => 'My Site', 'admin_email' => 'admin@example.com']);отримати
Section titled “отримати”Отримує значення конфігурації.
public function get(string $key, mixed $default = null): mixedПараметри:
| Параметр | Тип | Опис |
|---|---|---|
$key | рядок | Ключ конфігурації (крапкова нотація) |
$default | змішаний | Значення за замовчуванням, якщо не знайдено |
Повертає: mixed - значення конфігурації
Приклад:
$siteName = $config->get('sitename');$adminEmail = $config->get('admin.email', 'admin@example.com');комплект
Section titled “комплект”Встановлює значення конфігурації.
public function set(string $key, mixed $value): voidПараметри:
| Параметр | Тип | Опис |
|---|---|---|
$key | рядок | Ключ конфігурації |
$value | змішаний | Значення конфігурації |
Приклад:
$config->set('sitename', 'New Site Name');$config->set('features.cache_enabled', true);getModuleConfig
Section titled “getModuleConfig”Отримує конфігурацію для певного модуля.
public function getModuleConfig( string $moduleName): arrayПараметри:
| Параметр | Тип | Опис |
|---|---|---|
$moduleName | рядок | Назва каталогу модуля |
Повертає: array – масив конфігурації модуля
Приклад:
$publisherConfig = $config->getModuleConfig('publisher');Системні хуки
Section titled “Системні хуки”Системні хуки дозволяють модулям і плагінам виконувати код у певних точках життєвого циклу програми.
Клас HookManager
Section titled “Клас HookManager”namespace Xoops\Core;
class HookManager{ protected array $hooks = []; protected array $listeners = [];}Методи
Section titled “Методи”addHook
Section titled “addHook”Реєструє точку підключення.
public function addHook(string $name): voidПараметри:
| Параметр | Тип | Опис |
|---|---|---|
$name | рядок | Ідентифікатор гака |
Приклад:
$hooks = $kernel->getService('hooks');$hooks->addHook('system.startup');$hooks->addHook('user.login');$hooks->addHook('module.install');слухай
Section titled “слухай”Прикріплює слухавку до гачка.
public function listen( string $hookName, callable $callback, int $priority = 10): voidПараметри:
| Параметр | Тип | Опис |
|---|---|---|
$hookName | рядок | Ідентифікатор гака |
$callback | викликний | Функція для виконання |
$priority | int | Пріоритет виконання (старші запускаються спочатку) |
Приклад:
$hooks->listen('user.login', function($user) { error_log('User ' . $user->uname . ' logged in');}, 10);
$hooks->listen('module.install', function($module) { // Custom module installation logic echo "Installing " . $module->getName();}, 5);тригер
Section titled “тригер”Виконує всі слухачі для хука.
public function trigger( string $hookName, mixed $arguments = null): arrayПараметри:
| Параметр | Тип | Опис |
|---|---|---|
$hookName | рядок | Ідентифікатор гака |
$arguments | змішаний | Дані для передачі слухачам |
Повернення: array - Результати від усіх слухачів
Приклад:
$results = $hooks->trigger('system.startup');$results = $hooks->trigger('user.created', $newUser);Огляд основних служб
Section titled “Огляд основних служб”Під час завантаження ядро реєструє кілька основних служб:
| Сервіс | Клас | Призначення |
|---|---|---|
database | База даних Xoops | Рівень абстракції бази даних |
config | ConfigurationManager | Керування конфігурацією |
logger | Лісоруб | Ведення журналу програми |
template | XoopsTpl | Механізм шаблонів |
user | Менеджер користувачів | Сервіс керування користувачами |
module | ModuleManager | Модуль керування |
cache | CacheManager | Рівень кешування |
hooks | HookManager | Перехоплення системних подій |
Повний приклад використання
Section titled “Повний приклад використання”<?php/** * Custom module boot process utilizing kernel */
// Get kernel instance$kernel = XoopsKernel::getInstance();
// Boot the system$kernel->boot();
// Get services$config = $kernel->getService('config');$database = $kernel->getService('database');$logger = $kernel->getService('logger');$hooks = $kernel->getService('hooks');
// Access configuration$siteName = $config->get('sitename');$adminEmail = $config->get('admin.email');
// Register module-specific hooks$hooks->listen('user.login', function($user) { // Log user login $logger->info('User login: ' . $user->uname);
// Track in database $database->query( 'INSERT INTO ' . $database->prefix('event_log') . ' (type, user_id, message, timestamp) VALUES (?, ?, ?, ?)', ['login', $user->uid(), 'User login', time()] );});
$hooks->listen('module.install', function($module) { $logger->info('Module installed: ' . $module->getName());});
// Trigger hooks$hooks->trigger('system.startup');
// Use database service$result = $database->query( 'SELECT * FROM ' . $database->prefix('users') . ' LIMIT 10');
while ($row = $database->fetchArray($result)) { echo "User: " . htmlspecialchars($row['uname']) . "\n";}
// Register custom service$kernel->registerService('custom.repository', function($c) { return new CustomRepository($c->getService('database'));});
// Later access custom service$repo = $kernel->getService('custom.repository');Основні константи
Section titled “Основні константи”Ядро визначає кілька важливих констант під час завантаження:
// System pathsdefine('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');
// Web pathsdefine('XOOPS_URL', 'http://example.com');define('XOOPS_HTDOCS_URL', XOOPS_URL . '/htdocs');
// Databasedefine('XOOPS_DB_PREFIX', 'xoops_');Обробка помилок
Section titled “Обробка помилок”Ядро встановлює обробники помилок під час завантаження:
// Set custom error handlerset_error_handler(function($errno, $errstr, $errfile, $errline) { $kernel->getService('logger')->error( "Error: $errstr in $errfile:$errline" );});
// Set exception handlerset_exception_handler(function($exception) { $kernel->getService('logger')->critical( "Exception: " . $exception->getMessage() );});Найкращі практики
Section titled “Найкращі практики”- Single Boot - виклик
boot()лише один раз під час запуску програми - Використовувати контейнер служб - Реєстрація та отримання служб через ядро
- Обробляти хуки Early - реєструйте слухачів хуків перед тим, як запускати їх
- Реєстрація важливих подій - Використовуйте службу журналу для налагодження
- Конфігурація кешу - завантажте конфігурацію один раз і використовуйте повторно
- Обробка помилок - Завжди встановлюйте обробники помилок перед обробкою запитів
Пов’язана документація
Section titled “Пов’язана документація”- ../Module/Module-System - Модульна система та життєвий цикл
- ../Template/Template-System - Інтеграція системи шаблонів
- ../User/User-System - Автентифікація та керування користувачами
- ../Database/XoopsDatabase - Рівень бази даних
Див. також: XOOPS Джерело ядра