bethropolis/plugin-system

轻量级的PHP项目插件系统与管理器


README

PHP test CodeFactor Contributions GitHub version

这是一个轻量级、灵活的基于钩子和事件的插件管理系统。

它允许您轻松地将插件功能集成到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目录中包含了演示插件系统使用的示例插件。

贡献

欢迎对项目做出贡献!如果您遇到任何问题,有改进建议,或想添加新功能,请随时提出问题或提交拉取请求。

关于

这个项目是为了成为另一个我的项目的插件管理系统而制作的,但我希望它能帮助到其他的人。

许可

本项目采用MIT许可发布。更多详细信息请参阅LICENSE文件。