Kelas Kernel XOOPS
Kernel XOOPS menyediakan kerangka dasar untuk bootstrap sistem, mengelola konfigurasi, menangani kejadian sistem, dan menyediakan utilitas core. Kelas-kelas ini merupakan tulang punggung aplikasi XOOPS.
Arsitektur Sistem
Section titled “Arsitektur Sistem”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]Kelas XoopsKernel
Section titled “Kelas XoopsKernel”Kelas kernel utama yang menginisialisasi dan mengelola sistem XOOPS.
Ikhtisar Kelas
Section titled “Ikhtisar Kelas”namespace Xoops;
class XoopsKernel{ private static ?XoopsKernel $instance = null; protected ServiceContainer $services; protected ConfigurationManager $config; protected array $modules = []; protected bool $isLoaded = false;}Konstruktor
Section titled “Konstruktor”private function __construct()Konstruktor pribadi menerapkan pola tunggal.
dapatkan Instance
Section titled “dapatkan Instance”Mengambil contoh kernel tunggal.
public static function getInstance(): XoopsKernelPengembalian: XoopsKernel - Mesin virtual kernel tunggal
Contoh:
$kernel = XoopsKernel::getInstance();Proses Booting
Section titled “Proses Booting”Proses boot kernel mengikuti langkah-langkah berikut:
- Inisialisasi - Mengatur handler kesalahan, menentukan konstanta
- Konfigurasi - Memuat file konfigurasi
- Pendaftaran Layanan - Daftarkan layanan core
- Deteksi module - Pindai dan identifikasi module aktif
- Inisialisasi Basis Data - Menyambungkan ke basis data
- Pembersihan - Mempersiapkan penanganan permintaan
public function boot(): voidContoh:
$kernel = XoopsKernel::getInstance();$kernel->boot();Metode Kontainer Layanan
Section titled “Metode Kontainer Layanan”DaftarLayanan
Section titled “DaftarLayanan”Mendaftarkan layanan dalam wadah layanan.
public function registerService( string $name, callable|object $definition): voidParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$name | tali | Pengidentifikasi layanan |
$definition | dapat dipanggil|objek | Pabrik layanan atau contoh |
Contoh:
$kernel->registerService('custom.handler', function($c) { return new CustomHandler();});dapatkan Layanan
Section titled “dapatkan Layanan”Mengambil layanan terdaftar.
public function getService(string $name): mixedParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$name | tali | Pengidentifikasi layanan |
Pengembalian: mixed - Layanan yang diminta
Contoh:
$database = $kernel->getService('database');$logger = $kernel->getService('logger');memilikiLayanan
Section titled “memilikiLayanan”Memeriksa apakah suatu layanan terdaftar.
public function hasService(string $name): boolContoh:
if ($kernel->hasService('cache')) { $cache = $kernel->getService('cache');}Manajer Konfigurasi
Section titled “Manajer Konfigurasi”Mengelola konfigurasi aplikasi dan pengaturan module.
Ikhtisar Kelas
Section titled “Ikhtisar Kelas”namespace Xoops\Core;
class ConfigurationManager{ protected array $config = []; protected array $defaults = []; protected string $configPath;}Metode
Section titled “Metode”memuat
Section titled “memuat”Memuat konfigurasi dari file atau array.
public function load(string|array $source): voidParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$source | string|array | Konfigurasikan jalur atau larik file |
Contoh:
$config = $kernel->getService('config');$config->load(XOOPS_ROOT_PATH . '/include/config.php');$config->load(['sitename' => 'My Site', 'admin_email' => 'admin@example.com']);dapatkan
Section titled “dapatkan”Mengambil nilai konfigurasi.
public function get(string $key, mixed $default = null): mixedParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$key | tali | Kunci konfigurasi (notasi titik) |
$default | campuran | Nilai default jika tidak ditemukan |
Pengembalian: mixed - Nilai konfigurasi
Contoh:
$siteName = $config->get('sitename');$adminEmail = $config->get('admin.email', 'admin@example.com');Menetapkan nilai konfigurasi.
public function set(string $key, mixed $value): voidParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$key | tali | Kunci konfigurasi |
$value | campuran | Nilai konfigurasi |
Contoh:
$config->set('sitename', 'New Site Name');$config->set('features.cache_enabled', true);getModuleConfig
Section titled “getModuleConfig”Mendapatkan konfigurasi untuk module tertentu.
public function getModuleConfig( string $moduleName): arrayParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$moduleName | tali | Nama direktori module |
Pengembalian: array - Array konfigurasi module
Contoh:
$publisherConfig = $config->getModuleConfig('publisher');Kait Sistem
Section titled “Kait Sistem”Kait sistem memungkinkan module dan plugin mengeksekusi kode pada titik tertentu dalam siklus hidup aplikasi.
Kelas HookManager
Section titled “Kelas HookManager”namespace Xoops\Core;
class HookManager{ protected array $hooks = []; protected array $listeners = [];}Metode
Section titled “Metode”tambahkanHook
Section titled “tambahkanHook”Mendaftarkan titik kait.
public function addHook(string $name): voidParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$name | tali | Pengidentifikasi kait |
Contoh:
$hooks = $kernel->getService('hooks');$hooks->addHook('system.startup');$hooks->addHook('user.login');$hooks->addHook('module.install');dengarkan
Section titled “dengarkan”Melampirkan pendengar ke sebuah hook.
public function listen( string $hookName, callable $callback, int $priority = 10): voidParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$hookName | tali | Pengidentifikasi kait |
$callback | dapat dipanggil | Fungsi untuk mengeksekusi |
$priority | ke dalam | Prioritas eksekusi (yang lebih tinggi dijalankan terlebih dahulu) |
Contoh:
$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);pemicu
Section titled “pemicu”Mengeksekusi semua pendengar untuk sebuah hook.
public function trigger( string $hookName, mixed $arguments = null): arrayParameter:| Parameter | Ketik | Deskripsi |
|-----------|------|-------------|
| $hookName | tali | Pengidentifikasi kait |
| $arguments | campuran | Data untuk diteruskan ke pendengar |
Pengembalian: array - Hasil dari semua pendengar
Contoh:
$results = $hooks->trigger('system.startup');$results = $hooks->trigger('user.created', $newUser);Ikhtisar Layanan core
Section titled “Ikhtisar Layanan core”Kernel mendaftarkan beberapa layanan core saat boot:
| Layanan | Kelas | Tujuan |
|---|---|---|
database | XoopsDatabase | Lapisan abstraksi basis data |
config | Manajer Konfigurasi | Manajemen konfigurasi |
logger | Pencatat | Pencatatan aplikasi |
template | XoopsTpl | Mesin template |
user | Manajer Pengguna | Layanan manajemen pengguna |
module | Manajer module | Manajemen module |
cache | Manajer Cache | Lapisan cache |
hooks | Manajer Kait | Kait peristiwa sistem |
Contoh Penggunaan Lengkap
Section titled “Contoh Penggunaan Lengkap”<?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');Konstanta core
Section titled “Konstanta core”Kernel mendefinisikan beberapa konstanta penting selama boot:
// 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_');Penanganan Kesalahan
Section titled “Penanganan Kesalahan”Kernel menyiapkan handler kesalahan saat boot:
// 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() );});Praktik Terbaik
Section titled “Praktik Terbaik”- Boot Tunggal - Panggil
boot()hanya sekali saat startup aplikasi - Gunakan Service Container - Daftarkan dan ambil layanan melalui kernel
- Menangani Hooks Lebih Awal - Daftarkan pendengar hook sebelum memicunya
- Catat Peristiwa Penting - Gunakan layanan logger untuk debugging
- Konfigurasi Cache - Muat konfigurasi sekali dan gunakan kembali
- Penanganan Kesalahan - Selalu siapkan handler kesalahan sebelum memproses permintaan
Dokumentasi Terkait
Section titled “Dokumentasi Terkait”- ../Module/Module-System - Sistem module dan siklus hidup
- ../Template/Template-System - Integrasi mesin template
- ../User/User-System - Otentikasi dan manajemen pengguna
- ../Database/XoopsDatabase - Lapisan basis data
Lihat juga: Sumber Kernel XOOPS