XOOPS คลาสเคอร์เนล
เคอร์เนล XOOPS มอบเฟรมเวิร์กพื้นฐานสำหรับการบูตระบบ การจัดการการกำหนดค่า การจัดการเหตุการณ์ของระบบ และการจัดหายูทิลิตี้หลัก คลาสเหล่านี้เป็นแกนหลักของแอปพลิเคชัน XOOPS
สถาปัตยกรรมระบบ
หัวข้อที่มีชื่อว่า “สถาปัตยกรรมระบบ”mermaidgraph 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]คลาส XoopsKernel
หัวข้อที่มีชื่อว่า “คลาส XoopsKernel”คลาสเคอร์เนลหลักที่เริ่มต้นและจัดการระบบ 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();กระบวนการบูต
หัวข้อที่มีชื่อว่า “กระบวนการบูต”กระบวนการบู๊ตเคอร์เนลทำตามขั้นตอนเหล่านี้:
- การเริ่มต้น - ตั้งค่าตัวจัดการข้อผิดพลาด กำหนดค่าคงที่
- การกำหนดค่า - โหลดไฟล์การกำหนดค่า
- การลงทะเบียนบริการ - ลงทะเบียนบริการหลัก
- การตรวจจับโมดูล - สแกนและระบุโมดูลที่ใช้งานอยู่
- การเตรียมฐานข้อมูล - เชื่อมต่อกับฐานข้อมูล
- การล้างข้อมูล - เตรียมพร้อมสำหรับการจัดการคำขอ
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 ของระบบอนุญาตให้โมดูลและปลั๊กอินเรียกใช้โค้ด ณ จุดใดจุดหนึ่งในวงจรการใช้งานของแอปพลิเคชัน
คลาส HookManager
หัวข้อที่มีชื่อว่า “คลาส HookManager”namespace Xoops\Core;
class HookManager{ protected array $hooks = []; protected array $listeners = [];}วิธีการ
หัวข้อที่มีชื่อว่า “วิธีการ”เพิ่มHook
หัวข้อที่มีชื่อว่า “เพิ่มHook”ลงทะเบียนจุดเชื่อมต่อ
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);ภาพรวมบริการหลัก
หัวข้อที่มีชื่อว่า “ภาพรวมบริการหลัก”เคอร์เนลลงทะเบียนบริการหลักหลายอย่างระหว่างการบู๊ต:
| บริการ | คลาส | วัตถุประสงค์ |
|---|---|---|
database | Xoopsฐานข้อมูล | เลเยอร์นามธรรมของฐานข้อมูล |
config | ตัวจัดการการกำหนดค่า | การจัดการการกำหนดค่า |
logger | คนตัดไม้ | การบันทึกแอปพลิเคชัน |
template | XoopsTpl | เอ็นจิ้นเทมเพลต |
user | ผู้จัดการผู้ใช้ | บริการการจัดการผู้ใช้ |
module | ผู้จัดการโมดูล | การจัดการโมดูล |
cache | ตัวจัดการแคช | เลเยอร์แคช |
hooks | HookManager | 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 pathsdefine('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 pathsdefine('XOOPS_URL', 'http://example.com');define('XOOPS_HTDOCS_URL', XOOPS_URL . '/htdocs');
// Databasedefine('XOOPS_DB_PREFIX', 'xoops_');การจัดการข้อผิดพลาด
หัวข้อที่มีชื่อว่า “การจัดการข้อผิดพลาด”เคอร์เนลตั้งค่าตัวจัดการข้อผิดพลาดระหว่างการบู๊ต:
// Set custom error handlerset_error_handler(function($errno, $errstr, $errfile, $errline) { $kernel->getService('logger')->error( "Error: $errstr in $errfile:$errline" );});
// Set exception handlerset_exception_handler(function($exception) { $kernel->getService('logger')->critical( "Exception: " . $exception->getMessage() );});แนวทางปฏิบัติที่ดีที่สุด
หัวข้อที่มีชื่อว่า “แนวทางปฏิบัติที่ดีที่สุด”- บูตครั้งเดียว - โทร
boot()เพียงครั้งเดียวระหว่างการเริ่มต้นแอปพลิเคชัน - ใช้ Service Container - ลงทะเบียนและรับบริการผ่านเคอร์เนล
- Handle Hooks Early - ลงทะเบียนผู้ฟัง hook ก่อนที่จะกระตุ้นพวกเขา
- บันทึกเหตุการณ์สำคัญ - ใช้บริการตัวบันทึกเพื่อแก้ไขจุดบกพร่อง
- การกำหนดค่าแคช - โหลดการกำหนดค่าหนึ่งครั้งและนำมาใช้ซ้ำ
- การจัดการข้อผิดพลาด - ตั้งค่าตัวจัดการข้อผิดพลาดก่อนประมวลผลคำขอเสมอ
เอกสารที่เกี่ยวข้อง
หัวข้อที่มีชื่อว่า “เอกสารที่เกี่ยวข้อง”- ../Module/Module-System - ระบบโมดูลและวงจรชีวิต
- ../Template/Template-System - การรวมเอ็นจิ้นเทมเพลต
- ../User/User-System - การตรวจสอบและการจัดการผู้ใช้
- ../Database/XoopsDatabase - เลเยอร์ฐานข้อมูล
ดูเพิ่มเติมที่: ¤XOOPS Kernel Source