콘텐츠로 이동

XOOPS 커널 클래스

XOOPS 커널은 시스템 부트스트래핑, 구성 관리, 시스템 이벤트 처리 및 핵심 유틸리티 제공을 위한 기본 프레임워크를 제공합니다. 이러한 클래스는 XOOPS 애플리케이션의 백본을 형성합니다.

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

특정 모듈에 대한 구성을 가져옵니다.

public function getModuleConfig(
string $moduleName
): array

매개변수:

매개변수유형설명
$moduleName문자열모듈 디렉토리 이름

반환: array - 모듈 구성 배열

예:

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

시스템 후크를 사용하면 모듈과 플러그인이 애플리케이션 수명 주기의 특정 지점에서 코드를 실행할 수 있습니다.

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

후크에 대한 모든 리스너를 실행합니다.

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

매개변수:

매개변수유형설명
$hookName문자열후크 식별자
$arguments혼합청취자에게 전달할 데이터

반환: array - 모든 청취자의 결과

예:

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

커널은 부팅 중에 여러 핵심 서비스를 등록합니다.

서비스클래스목적
databaseXoopsDatabase데이터베이스 추상화 계층
config구성 관리자구성 관리
logger로거애플리케이션 로깅
templateXoopsTpl템플릿 엔진
user사용자 관리자사용자 관리 서비스
module모듈관리자모듈 관리
cache캐시관리자캐싱 레이어
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 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. 서비스 컨테이너 사용 - 커널을 통해 서비스 등록 및 검색
  3. 훅 조기 처리 - 후크 리스너를 트리거하기 전에 등록하세요.
  4. 중요 이벤트 기록 - 디버깅을 위해 로거 서비스를 사용합니다.
  5. 캐시 구성 - 구성을 한 번 로드하고 재사용
  6. 오류 처리 - 요청을 처리하기 전에 항상 오류 처리기를 설정합니다.

-../Module/Module-System - 모듈 시스템 및 라이프사이클 -../Template/Template-System - 템플릿 엔진 통합 -../User/User-System - 사용자 인증 및 관리 -../Database/XoopsDatabase - 데이터베이스 계층


참조: XOOPS 커널 소스