Перейти до вмісту

XOOPS Класи ядра

Ядро XOOPS забезпечує базову структуру для початкового завантаження системи, керування конфігураціями, обробки системних подій і надання основних утиліт. Ці класи утворюють основу програми XOOPS.

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.

namespace Xoops;
class XoopsKernel
{
private static ?XoopsKernel $instance = null;
protected ServiceContainer $services;
protected ConfigurationManager $config;
protected array $modules = [];
protected bool $isLoaded = false;
}
private function __construct()

Приватний конструктор застосовує шаблон одного елемента.

Отримує одиночний екземпляр ядра.

public static function getInstance(): XoopsKernel

Повертає: XoopsKernel - екземпляр єдиного ядра

Приклад:

$kernel = XoopsKernel::getInstance();

Процес завантаження ядра складається з таких кроків:

  1. Ініціалізація – установіть обробники помилок, визначте константи
  2. Конфігурація - Завантажте файли конфігурації
  3. Реєстрація служби - реєстрація основних послуг
  4. Виявлення модулів - Скануйте та ідентифікуйте активні модулі
  5. Ініціалізація бази даних - підключення до бази даних
  6. Очищення - Підготовка до обробки запитів
public function boot(): void

Приклад:

$kernel = XoopsKernel::getInstance();
$kernel->boot();

Методи контейнера служби

Section titled “Методи контейнера служби”

Реєструє послугу в контейнері послуг.

public function registerService(
string $name,
callable|object $definition
): void

Параметри:

ПараметрТипОпис
$nameрядокІдентифікатор послуги
$definitionвикликається|об’єктОбслуговування заводу або екземпляра

Приклад:

$kernel->registerService('custom.handler', function($c) {
return new CustomHandler();
});

Отримує зареєстровану службу.

public function getService(string $name): mixed

Параметри:

ПараметрТипОпис
$nameрядокІдентифікатор послуги

Повернення: mixed - запитана послуга

Приклад:

$database = $kernel->getService('database');
$logger = $kernel->getService('logger');

Перевіряє, чи зареєстрована служба.

public function hasService(string $name): bool

Приклад:

if ($kernel->hasService('cache')) {
$cache = $kernel->getService('cache');
}

Керує конфігурацією програми та налаштуваннями модулів.

namespace Xoops\Core;
class ConfigurationManager
{
protected array $config = [];
protected array $defaults = [];
protected string $configPath;
}

Завантажує конфігурацію з файлу або масиву.

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']);

Отримує значення конфігурації.

public function get(string $key, mixed $default = null): mixed

Параметри:

ПараметрТипОпис
$keyрядокКлюч конфігурації (крапкова нотація)
$defaultзмішанийЗначення за замовчуванням, якщо не знайдено

Повертає: mixed - значення конфігурації

Приклад:

$siteName = $config->get('sitename');
$adminEmail = $config->get('admin.email', 'admin@example.com');

Встановлює значення конфігурації.

public function set(string $key, mixed $value): void

Параметри:

ПараметрТипОпис
$keyрядокКлюч конфігурації
$valueзмішанийЗначення конфігурації

Приклад:

$config->set('sitename', 'New Site Name');
$config->set('features.cache_enabled', true);

Отримує конфігурацію для певного модуля.

public function getModuleConfig(
string $moduleName
): array

Параметри:

ПараметрТипОпис
$moduleNameрядокНазва каталогу модуля

Повертає: array – масив конфігурації модуля

Приклад:

$publisherConfig = $config->getModuleConfig('publisher');

Системні хуки дозволяють модулям і плагінам виконувати код у певних точках життєвого циклу програми.

namespace Xoops\Core;
class HookManager
{
protected array $hooks = [];
protected array $listeners = [];
}

Реєструє точку підключення.

public function addHook(string $name): void

Параметри:

ПараметрТипОпис
$nameрядокІдентифікатор гака

Приклад:

$hooks = $kernel->getService('hooks');
$hooks->addHook('system.startup');
$hooks->addHook('user.login');
$hooks->addHook('module.install');

Прикріплює слухавку до гачка.

public function listen(
string $hookName,
callable $callback,
int $priority = 10
): void

Параметри:

ПараметрТипОпис
$hookNameрядокІдентифікатор гака
$callbackвикликнийФункція для виконання
$priorityintПріоритет виконання (старші запускаються спочатку)

Приклад:

$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);

Виконує всі слухачі для хука.

public function trigger(
string $hookName,
mixed $arguments = null
): array

Параметри:

ПараметрТипОпис
$hookNameрядокІдентифікатор гака
$argumentsзмішанийДані для передачі слухачам

Повернення: array - Результати від усіх слухачів

Приклад:

$results = $hooks->trigger('system.startup');
$results = $hooks->trigger('user.created', $newUser);

Під час завантаження ядро реєструє кілька основних служб:

СервісКласПризначення
databaseБаза даних XoopsРівень абстракції бази даних
configConfigurationManagerКерування конфігурацією
loggerЛісорубВедення журналу програми
templateXoopsTplМеханізм шаблонів
userМенеджер користувачівСервіс керування користувачами
moduleModuleManagerМодуль керування
cacheCacheManagerРівень кешування
hooksHookManagerПерехоплення системних подій

Повний приклад використання

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');

Ядро визначає кілька важливих констант під час завантаження:

// System paths
define('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 paths
define('XOOPS_URL', 'http://example.com');
define('XOOPS_HTDOCS_URL', XOOPS_URL . '/htdocs');
// Database
define('XOOPS_DB_PREFIX', 'xoops_');

Ядро встановлює обробники помилок під час завантаження:

// Set custom error handler
set_error_handler(function($errno, $errstr, $errfile, $errline) {
$kernel->getService('logger')->error(
"Error: $errstr in $errfile:$errline"
);
});
// Set exception handler
set_exception_handler(function($exception) {
$kernel->getService('logger')->critical(
"Exception: " . $exception->getMessage()
);
});
  1. Single Boot - виклик boot() лише один раз під час запуску програми
  2. Використовувати контейнер служб - Реєстрація та отримання служб через ядро
  3. Обробляти хуки Early - реєструйте слухачів хуків перед тим, як запускати їх
  4. Реєстрація важливих подій - Використовуйте службу журналу для налагодження
  5. Конфігурація кешу - завантажте конфігурацію один раз і використовуйте повторно
  6. Обробка помилок - Завжди встановлюйте обробники помилок перед обробкою запитів

Пов’язана документація

Section titled “Пов’язана документація”
  • ../Module/Module-System - Модульна система та життєвий цикл
  • ../Template/Template-System - Інтеграція системи шаблонів
  • ../User/User-System - Автентифікація та керування користувачами
  • ../Database/XoopsDatabase - Рівень бази даних

Див. також: XOOPS Джерело ядра