跳转到内容

“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();

在服务容器中注册服务。

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可调用要执行的函数
$priority整数执行优先级(较高的先运行)

示例:

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

内核在启动过程中注册了几个核心服务:

服务班级目的
databaseXOOPS数据库数据库抽象层
config配置管理器配置管理
logger记录仪应用程序日志记录
templateXOOPSTpl模板引擎
user用户管理器用户管理服务
module模区块管理器模区块管理
cache缓存管理器缓存层
hooks钩子管理器系统事件挂钩
<?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. 单次启动 - 在应用程序启动期间仅调用 boot() 一次
  2. 使用服务容器 - 通过内核注册和检索服务
  3. Handle Hooks Early - 在触发钩子监听器之前注册它们
  4. 记录重要事件 - 使用记录器服务进行调试
  5. 缓存配置 - 加载配置一次并重复使用
  6. 错误处理 - 在处理请求之前始终设置错误处理程序
  • ../Module/Module-System - 模区块系统和生命周期
  • ../Template/Template-System - 模板引擎集成
  • ../User/User-System - 用户身份验证和管理
  • ../Database/XOOPSDatabase - 数据库层

另见:XOOPS Kernel Source