Bỏ qua để đến nội dung

Các lớp hạt nhân XOOPS

Hạt nhân XOOPS cung cấp khung nền tảng để khởi động hệ thống, quản lý cấu hình, xử lý các sự kiện hệ thống và cung cấp các tiện ích cốt lõi. Các classes này tạo thành xương sống của ứng dụng 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]

kernel class chính khởi tạo và quản lý hệ thống 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()

Hàm tạo riêng thực thi mẫu đơn.

Truy xuất phiên bản kernel singleton.

public static function getInstance(): XoopsKernel

Trả về: XoopsKernel - Phiên bản kernel đơn lẻ

Ví dụ:

$kernel = XoopsKernel::getInstance();

Quá trình khởi động kernel thực hiện theo các bước sau:

  1. Khởi tạo - Đặt trình xử lý lỗi, xác định hằng số
  2. Cấu hình - Tải tập tin cấu hình
  3. Đăng ký dịch vụ - Đăng ký các dịch vụ cốt lõi
  4. Phát hiện mô-đun - Quét và xác định modules đang hoạt động
  5. Khởi tạo cơ sở dữ liệu - Kết nối với cơ sở dữ liệu
  6. Dọn dẹp - Chuẩn bị xử lý yêu cầu
public function boot(): void

Ví dụ:

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

Đăng ký một dịch vụ trong vùng chứa dịch vụ.

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

Thông số:

Tham sốLoạiMô tả
$namechuỗiMã định danh dịch vụ
$definitioncó thể gọi được|đối tượngNhà máy dịch vụ hoặc ví dụ

Ví dụ:

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

Truy xuất một dịch vụ đã đăng ký.

public function getService(string $name): mixed

Thông số:

Tham sốLoạiMô tả
$namechuỗiMã định danh dịch vụ

Trả về: mixed - Dịch vụ được yêu cầu

Ví dụ:

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

Kiểm tra nếu một dịch vụ được đăng ký.

public function hasService(string $name): bool

Ví dụ:

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

Quản lý cấu hình ứng dụng và cài đặt mô-đun.

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

Tải cấu hình từ tập tin hoặc mảng.

public function load(string|array $source): void

Thông số:

Tham sốLoạiMô tả
$sourcechuỗi|mảngĐường dẫn hoặc mảng tệp cấu hình

Ví dụ:

$config = $kernel->getService('config');
$config->load(XOOPS_ROOT_PATH . '/include/config.php');
$config->load(['sitename' => 'My Site', 'admin_email' => 'admin@example.com']);

Truy xuất một giá trị cấu hình.

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

Thông số:

Tham sốLoạiMô tả
$keychuỗiKhóa cấu hình (ký hiệu dấu chấm)
$defaulthỗn hợpGiá trị mặc định nếu không tìm thấy

Trả về: mixed - Giá trị cấu hình

Ví dụ:

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

Đặt giá trị cấu hình.

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

Thông số:

Tham sốLoạiMô tả
$keychuỗiPhím cấu hình
$valuehỗn hợpGiá trị cấu hình

Ví dụ:

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

Nhận cấu hình cho một mô-đun cụ thể.

public function getModuleConfig(
string $moduleName
): array

Thông số:

Tham sốLoạiMô tả
$moduleNamechuỗiTên thư mục mô-đun

Trả về: array - Mảng cấu hình mô-đunVí dụ:

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

Móc hệ thống cho phép modules và các plugin thực thi mã tại các điểm cụ thể trong vòng đời ứng dụng.

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

Đăng ký một điểm móc.

public function addHook(string $name): void

Thông số:

Tham sốLoạiMô tả
$namechuỗiĐịnh danh móc

Ví dụ:

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

Gắn một người nghe vào một cái móc.

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

Thông số:

Tham sốLoạiMô tả
$hookNamechuỗiĐịnh danh móc
$callbackcó thể gọi đượcChức năng thực thi
$priorityintƯu tiên thực thi (chạy cao hơn trước)

Ví dụ:

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

Thực hiện tất cả các trình nghe cho một hook.

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

Thông số:

Tham sốLoạiMô tả
$hookNamechuỗiĐịnh danh móc
$argumentshỗn hợpDữ liệu cần truyền tới người nghe

Trả về: array - Kết quả từ tất cả người nghe

Ví dụ:

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

kernel đăng ký một số dịch vụ cốt lõi trong quá trình khởi động:

Dịch vụLớpMục đích
databaseCơ sở dữ liệu XoopsLớp trừu tượng cơ sở dữ liệu
configTrình quản lý cấu hìnhQuản lý cấu hình
loggerMáy ghi nhật kýGhi nhật ký ứng dụng
templateXoopsTplCông cụ tạo mẫu
userTrình quản lý người dùngDịch vụ quản lý người dùng
moduleTrình quản lý mô-đunQuản lý mô-đun
cacheTrình quản lý bộ đệmLớp bộ nhớ đệm
hooksHookManagerMóc sự kiện hệ thống
<?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');

kernel xác định một số hằng số quan trọng trong quá trình khởi động:

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

kernel thiết lập trình xử lý lỗi trong khi khởi động:

// 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. Khởi động một lần - Chỉ gọi boot() một lần trong khi khởi động ứng dụng
  2. Sử dụng Service Container - Đăng ký và truy xuất dịch vụ thông qua kernel
  3. Xử lý Hook sớm - Đăng ký trình nghe hook trước khi kích hoạt chúng
  4. Ghi lại các sự kiện quan trọng - Sử dụng dịch vụ ghi nhật ký để gỡ lỗi
  5. Cấu hình bộ đệm - Tải cấu hình một lần và sử dụng lại
  6. Xử lý lỗi - Luôn thiết lập trình xử lý lỗi trước khi xử lý yêu cầu
  • ../Module/Module-System - Hệ thống mô-đun và vòng đời
  • ../Template/Template-System - Tích hợp công cụ tạo mẫu
  • ../User/User-System - Xác thực và quản lý người dùng
  • ../Database/XoopsDatabase - Lớp cơ sở dữ liệu

Xem thêm: Nguồn hạt nhân XOOPS