XOOPSカーネルクラス
XOOPSカーネルはシステムのブートストラップ、設定の管理、システムイベントの処理、コアユーティリティの提供のための基本的なフレームワークを提供します。これらのクラスはXOOPSアプリケーションのバックボーンを形成します。
システムアーキテクチャ
Section titled “システムアーキテクチャ”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[データベースサービス]XoopsKernelクラス
Section titled “XoopsKernelクラス”XOOPSシステムを初期化および管理するメインカーネルクラス。
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 | string | サービス識別子 |
$definition | callable|object | サービスファクトリまたはインスタンス |
例:
$kernel->registerService('custom.handler', function($c) { return new CustomHandler();});getService
Section titled “getService”登録されたサービスを取得します。
public function getService(string $name): mixedパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
$name | string | サービス識別子 |
戻り値: 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 “設定マネージャー”アプリケーション設定とモジュール設定を管理します。
namespace Xoops\Core;
class ConfigurationManager{ protected array $config = []; protected array $defaults = []; protected string $configPath;}ファイルまたは配列から設定をロード。
public function load(string|array $source): voidパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
$source | string|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パラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
$key | string | 設定キー (ドット表記) |
$default | mixed | 見つからない場合のデフォルト値 |
戻り値: mixed - 設定値
例:
$siteName = $config->get('sitename');$adminEmail = $config->get('admin.email', 'admin@example.com');設定値を設定。
public function set(string $key, mixed $value): voidパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
$key | string | 設定キー |
$value | mixed | 設定値 |
例:
$config->set('sitename', 'New Site Name');$config->set('features.cache_enabled', true);getModuleConfig
Section titled “getModuleConfig”特定のモジュールの設定を取得。
public function getModuleConfig( string $moduleName): arrayパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
$moduleName | string | モジュールディレクトリ名 |
戻り値: array - モジュール設定配列
例:
$publisherConfig = $config->getModuleConfig('publisher');システムフック
Section titled “システムフック”システムフックはモジュールとプラグインがアプリケーションライフサイクル内の特定のポイントでコードを実行できるようにします。
HookManagerクラス
Section titled “HookManagerクラス”namespace Xoops\Core;
class HookManager{ protected array $hooks = []; protected array $listeners = [];}addHook
Section titled “addHook”フックポイントを登録。
public function addHook(string $name): voidパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
$name | string | フック識別子 |
例:
$hooks = $kernel->getService('hooks');$hooks->addHook('system.startup');$hooks->addHook('user.login');$hooks->addHook('module.install');listen
Section titled “listen”フックにリスナーを添付。
public function listen( string $hookName, callable $callback, int $priority = 10): voidパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
$hookName | string | フック識別子 |
$callback | callable | 実行する関数 |
$priority | int | 実行優先度 (高いほど先に実行) |
例:
$hooks->listen('user.login', function($user) { error_log('ユーザー ' . $user->uname . ' がログインしました');}, 10);
$hooks->listen('module.install', function($module) { // カスタムモジュールインストールロジック echo "インストール中 " . $module->getName();}, 5);trigger
Section titled “trigger”フックのすべてのリスナーを実行。
public function trigger( string $hookName, mixed $arguments = null): arrayパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
$hookName | string | フック識別子 |
$arguments | mixed | リスナーに渡すデータ |
戻り値: array - すべてのリスナーからの結果
例:
$results = $hooks->trigger('system.startup');$results = $hooks->trigger('user.created', $newUser);コアサービス概要
Section titled “コアサービス概要”カーネルはブート中にいくつかのコアサービスを登録します:
| サービス | クラス | 目的 |
|---|---|---|
database | XoopsDatabase | データベース抽象化レイヤー |
config | ConfigurationManager | 設定管理 |
logger | Logger | アプリケーションロギング |
template | XoopsTpl | テンプレートエンジン |
user | UserManager | ユーザー管理サービス |
module | ModuleManager | モジュール管理 |
cache | CacheManager | キャッシング層 |
hooks | HookManager | システムイベントフック |
完全な使用例
Section titled “完全な使用例”<?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() );});ベストプラクティス
Section titled “ベストプラクティス”- シングルブート - アプリケーション起動時に
boot()を一度だけ呼び出す - サービスコンテナを使用 - カーネルを通じてサービスを登録および取得
- 早期にフックハンドラーを登録 - それらをトリガーする前にリスナーを登録
- 重要なイベントをログ - デバッグのためにロガーサービスを使用
- 設定をキャッシュ - 一度ロードして再利用
- エラー処理をセットアップ - リクエストを処理する前にエラーハンドラーをセットアップ
関連ドキュメンテーション
Section titled “関連ドキュメンテーション”- ../Module/Module-System - モジュールシステムとライフサイクル
- ../Template/Template-System - テンプレートエンジン統合
- ../User/User-System - ユーザー認証と管理
- ../Database/XoopsDatabase - データベースレイヤー
参照: XOOPSカーネルソース