ข้ามไปยังเนื้อหา

XOOPS คลาสเคอร์เนล

เคอร์เนล XOOPS มอบเฟรมเวิร์กพื้นฐานสำหรับการบูตระบบ การจัดการการกำหนดค่า การจัดการเหตุการณ์ของระบบ และการจัดหายูทิลิตี้หลัก คลาสเหล่านี้เป็นแกนหลักของแอปพลิเคชัน XOOPS

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

####getModuleConfig

รับการกำหนดค่าสำหรับโมดูลเฉพาะ

public function getModuleConfig(
string $moduleName
): array

พารามิเตอร์:

พารามิเตอร์พิมพ์คำอธิบาย
$moduleNameสตริงชื่อไดเร็กทอรีโมดูล

ผลตอบแทน: array - อาร์เรย์การกำหนดค่าโมดูล

ตัวอย่าง:

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

hooks ของระบบอนุญาตให้โมดูลและปลั๊กอินเรียกใช้โค้ด ณ จุดใดจุดหนึ่งในวงจรการใช้งานของแอปพลิเคชัน

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

ดำเนินการ Listener ทั้งหมดเพื่อขอ hook

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ตัวจัดการแคชเลเยอร์แคช
hooksHookManagerhooks เหตุการณ์ของระบบ
<?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. ใช้ Service Container - ลงทะเบียนและรับบริการผ่านเคอร์เนล
  3. Handle Hooks Early - ลงทะเบียนผู้ฟัง hook ก่อนที่จะกระตุ้นพวกเขา
  4. บันทึกเหตุการณ์สำคัญ - ใช้บริการตัวบันทึกเพื่อแก้ไขจุดบกพร่อง
  5. การกำหนดค่าแคช - โหลดการกำหนดค่าหนึ่งครั้งและนำมาใช้ซ้ำ
  6. การจัดการข้อผิดพลาด - ตั้งค่าตัวจัดการข้อผิดพลาดก่อนประมวลผลคำขอเสมอ
  • ../Module/Module-System - ระบบโมดูลและวงจรชีวิต
  • ../Template/Template-System - การรวมเอ็นจิ้นเทมเพลต
  • ../User/User-System - การตรวจสอบและการจัดการผู้ใช้
  • ../Database/XoopsDatabase - เลเยอร์ฐานข้อมูล

ดูเพิ่มเติมที่: ¤XOOPS Kernel Source