bethropolis / plugin-system
轻量级的PHP项目插件系统与管理器
1.0.8
2023-08-27 00:50 UTC
Requires
- php: ^8.0
Requires (Dev)
- phpunit/phpunit: ^10.2
- dev-main
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.0
- dev-dependabot/npm_and_yarn/docs/rollup-3.29.5
- dev-dependabot/npm_and_yarn/docs/vite-4.5.5
- dev-dependabot/npm_and_yarn/docs/path-to-regexp-6.3.0
- dev-dependabot/npm_and_yarn/docs/zod-3.23.8
- dev-dependabot/npm_and_yarn/docs/undici-5.28.4
- dev-dependabot/npm_and_yarn/docs/braces-3.0.3
- dev-dependabot/npm_and_yarn/docs/micromatch-4.0.8
- dev-dev
This package is auto-updated.
Last update: 2024-09-25 23:59:53 UTC
README
这是一个轻量级、灵活的基于钩子和事件的插件管理系统。
它允许您轻松地将插件功能集成到PHP应用程序中,提供模块化和可扩展的架构。
特性
- 易于集成
- 动态加载
- 基于钩子的架构
- 事件驱动编程
- 灵活且可扩展
- 包含插件管理器
- 插件生命周期
安装
您需要使用composer进行安装。在项目目录中运行以下命令
composer require bethropolis/plugin-system
您也可以下载最新版本并将其添加到项目目录中。
请注意,如果您这样做,您将需要在项目脚本中包含自动加载文件。例如
require "plugin-system/src/autoload.php";
使用方法
加载插件
要从特定目录加载插件,请使用loadPlugins
方法
require "vendor/autoload.php"; // for download installed method just replace this line with the autoloader. use Bethropolis\PluginSystem\System; $dir = __DIR__ . "/examples/"; # directory to load plugins from System::loadPlugins($dir);
将插件链接到钩子
可以使用linkPluginToHook
方法将插件函数链接到钩子。这允许您定义当特定钩子被触发时要执行的操作
use Bethropolis\PluginSystem\System; // Link a plugin function to a hook System::linkPluginToHook('my_hook', $callback);
触发钩子和事件
可以使用executeHook()
方法触发钩子,并使用triggerEvent()
方法触发事件。以下是一个示例
use Bethropolis\PluginSystem\System; // Trigger a hook System::executeHook('my_hook', $pluginName, ...$args); // trigger multiple hooks System::executeHooks(['my_hook1', 'my_hook2'], $pluginName, ...$args); # Events // Register an event System::registerEvent('my_event'); // Add an action to the event System::addAction('my_event', function ($arg) { // Action code here }); // Trigger the event System::triggerEvent('my_event', ...$args);
插件
以下是一个插件的示例
// eg. FILE: /plugins-folder/examplepugin.php class ExamplePlugin extends \Bethropolis\PluginSystem\Plugin { public function initialize() { $this->linkHook('my_hook', array($this, 'myCallback')); } public function myCallback($name = []) { $name = array_shift($name); return "hello {$name}"; } }
更多示例
在examples目录中包含了演示插件系统使用的示例插件。
贡献
欢迎对项目做出贡献!如果您遇到任何问题,有改进建议,或想添加新功能,请随时提出问题或提交拉取请求。
关于
这个项目是为了成为另一个我的项目的插件管理系统而制作的,但我希望它能帮助到其他的人。