Xboard/app/Services/Plugin/AbstractPlugin.php

73 lines
1.6 KiB
PHP

<?php
namespace App\Services\Plugin;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\File;
use Symfony\Component\HttpFoundation\Response;
abstract class AbstractPlugin
{
protected array $config = [];
protected string $basePath;
protected string $pluginCode;
public function __construct($pluginCode)
{
$this->pluginCode = $pluginCode;
$reflection = new \ReflectionClass($this);
$this->basePath = dirname($reflection->getFileName());
}
/**
* 设置配置
*/
public function setConfig(array $config): void
{
$this->config = $config;
}
/**
* 获取配置
*/
public function getConfig(): array
{
return $this->config;
}
/**
* 注册动作钩子监听器
*/
protected function listen(string $hook, callable $callback, int $priority = 20): void
{
HookManager::register($hook, $callback, $priority);
}
/**
* 注册过滤器钩子
*/
protected function filter(string $hook, callable $callback, int $priority = 20): void
{
HookManager::registerFilter($hook, $callback, $priority);
}
/**
* 移除事件监听器
*/
protected function removeListener(string $hook): void
{
HookManager::remove($hook);
}
/**
* 中断当前请求并返回新的响应
*
* @param Response|string|array $response
* @return never
*/
protected function intercept(Response|string|array $response): never
{
HookManager::intercept($response);
}
}