コンテンツにスキップ

XOOPSカーネルクラス

XOOPSカーネルはシステムのブートストラップ、設定の管理、システムイベントの処理、コアユーティリティの提供のための基本的なフレームワークを提供します。これらのクラスはXOOPSアプリケーションのバックボーンを形成します。

graph TD
A[XoopsKernel] -->|初期化| B[設定マネージャー]
A -->|管理| C[サービスコンテナ]
A -->|処理| D[システムフック]
A -->|登録| E[コアサービス]
B -->|ロード| F[config.php]
B -->|管理| G[モジュール設定]
C -->|含む| H[データベース]
C -->|含む| I[ロガー]
C -->|含む| J[テンプレートエンジン]
C -->|含む| K[モジュールマネージャー]
E -->|登録| L[ユーザーサービス]
E -->|登録| M[モジュールサービス]
E -->|登録| N[データベースサービス]

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

パラメータ:

パラメータ説明
$namestringサービス識別子
$definitioncallable|objectサービスファクトリまたはインスタンス

例:

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

登録されたサービスを取得します。

public function getService(string $name): mixed

パラメータ:

パラメータ説明
$namestringサービス識別子

戻り値: 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

パラメータ:

パラメータ説明
$sourcestring|array設定ファイルパスまたは配列

例:

$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

パラメータ:

パラメータ説明
$keystring設定キー (ドット表記)
$defaultmixed見つからない場合のデフォルト値

戻り値: mixed - 設定値

例:

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

設定値を設定。

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

パラメータ:

パラメータ説明
$keystring設定キー
$valuemixed設定値

例:

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

特定のモジュールの設定を取得。

public function getModuleConfig(
string $moduleName
): array

パラメータ:

パラメータ説明
$moduleNamestringモジュールディレクトリ名

戻り値: array - モジュール設定配列

例:

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

システムフックはモジュールとプラグインがアプリケーションライフサイクル内の特定のポイントでコードを実行できるようにします。

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

フックポイントを登録。

public function addHook(string $name): void

パラメータ:

パラメータ説明
$namestringフック識別子

例:

$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

パラメータ:

パラメータ説明
$hookNamestringフック識別子
$callbackcallable実行する関数
$priorityint実行優先度 (高いほど先に実行)

例:

$hooks->listen('user.login', function($user) {
error_log('ユーザー ' . $user->uname . ' がログインしました');
}, 10);
$hooks->listen('module.install', function($module) {
// カスタムモジュールインストールロジック
echo "インストール中 " . $module->getName();
}, 5);

フックのすべてのリスナーを実行。

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

パラメータ:

パラメータ説明
$hookNamestringフック識別子
$argumentsmixedリスナーに渡すデータ

戻り値: array - すべてのリスナーからの結果

例:

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

カーネルはブート中にいくつかのコアサービスを登録します:

サービスクラス目的
databaseXoopsDatabaseデータベース抽象化レイヤー
configConfigurationManager設定管理
loggerLoggerアプリケーションロギング
templateXoopsTplテンプレートエンジン
userUserManagerユーザー管理サービス
moduleModuleManagerモジュール管理
cacheCacheManagerキャッシング層
hooksHookManagerシステムイベントフック
<?php
/**
* カーネルを利用するカスタムモジュールブートプロセス
*/
// カーネルインスタンスを取得
$kernel = XoopsKernel::getInstance();
// システムをブート
$kernel->boot();
// サービスを取得
$config = $kernel->getService('config');
$database = $kernel->getService('database');
$logger = $kernel->getService('logger');
$hooks = $kernel->getService('hooks');
// 設定にアクセス
$siteName = $config->get('sitename');
$adminEmail = $config->get('admin.email');
// モジュール固有のフックを登録
$hooks->listen('user.login', function($user) {
// ユーザーログインをログ
$logger->info('ユーザーログイン: ' . $user->uname);
// データベースで追跡
$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->getName());
});
// フックをトリガー
$hooks->trigger('system.startup');
// データベースサービスを使用
$result = $database->query(
'SELECT * FROM ' . $database->prefix('users') .
' LIMIT 10'
);
while ($row = $database->fetchArray($result)) {
echo "ユーザー: " . htmlspecialchars($row['uname']) . "\n";
}
// カスタムサービスを登録
$kernel->registerService('custom.repository', function($c) {
return new CustomRepository($c->getService('database'));
});
// 後でカスタムサービスにアクセス
$repo = $kernel->getService('custom.repository');

カーネルはブート中にいくつかの重要な定数を定義します:

// システムパス
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');
// ウェブパス
define('XOOPS_URL', 'http://example.com');
define('XOOPS_HTDOCS_URL', XOOPS_URL . '/htdocs');
// データベース
define('XOOPS_DB_PREFIX', 'xoops_');

カーネルはブート中にエラーハンドラーをセットアップします:

// カスタムエラーハンドラーをセット
set_error_handler(function($errno, $errstr, $errfile, $errline) {
$kernel->getService('logger')->error(
"エラー: $errstr in $errfile:$errline"
);
});
// 例外ハンドラーをセット
set_exception_handler(function($exception) {
$kernel->getService('logger')->critical(
"例外: " . $exception->getMessage()
);
});
  1. シングルブート - アプリケーション起動時にboot()を一度だけ呼び出す
  2. サービスコンテナを使用 - カーネルを通じてサービスを登録および取得
  3. 早期にフックハンドラーを登録 - それらをトリガーする前にリスナーを登録
  4. 重要なイベントをログ - デバッグのためにロガーサービスを使用
  5. 設定をキャッシュ - 一度ロードして再利用
  6. エラー処理をセットアップ - リクエストを処理する前にエラーハンドラーをセットアップ
  • ../Module/Module-System - モジュールシステムとライフサイクル
  • ../Template/Template-System - テンプレートエンジン統合
  • ../User/User-System - ユーザー認証と管理
  • ../Database/XoopsDatabase - データベースレイヤー

参照: XOOPSカーネルソース