hongyukeji / plugin
PHP 的插件系统,支持级联事件。
v1.5.1
2019-11-21 07:55 UTC
Requires
- php: >=5.4.0
- hongyukeji/plugin-package: ^1.3
README
一个非常完整的插件系统,让您可以宣称您的应用程序支持插件!
为了使此功能正常工作,您需要 PHP 5.4。
组件
php artisan vendor:publish --provider="Hongyukeji\Plugin\PluginServiceProvider"
组件
-
钩子
将它们放在您的代码中以执行事件。与几个其他包不同,这些钩子允许与数据交互,并且可以持有类的范围。
-
事件
当遇到具有相同键的钩子时,将发生事件。事件接受静态方法和闭包,以及优先级,因为 您可以堆叠它们并将变量传递给彼此。
-
结果
钩子和事件共享的对象,并返回。它们使您的代码免于神秘的函数参数和更混乱的返回值。
-
插件
内部包处理器。 插件实际上是 Composer 包。 使用引导文件创建新事件和使用安装/卸载/升级钩子。
-
加载器
包实用工具。它检查您告诉它的文件夹,查找插件,加载它们并向您提供数组。
-
PlugSuit (特质)
自动将插件添加到您的类中。它添加了前后钩子,并允许您覆盖传递给方法的参数。
您需要做什么?您必须使用 Loader 类创建您自己的管理面板并运行您选择的插件。由于它没有任何数据库绑定(或任何依赖关系),您必须自己创建启用/禁用系统。
以下是一些示例。
您可以通过以下页面深入了解这些说明
钩子和事件
包的最基本部分。您可以在代码的任何地方使用钩子和事件,而不仅仅是插件中。
<?php use \Hongyukeji\Plugin\Hook as Hook; use \Hongyukeji\Plugin\Event as Event; // define an Event Event::forge('triggerOnThis')->setCall(function($result){ $result->set(123); })->priority(2); // the Hook triggers it $result = Hook::forge('triggerOnThis')->execute(); // echoes 123 echo $result->get();
结果
我们编写了结果包以避免与级联事件混淆。这就是为什么事件只接受一个参数,我们用它来调用 $result
。
由于这里的大部分错误都发生在这一部分,任何未设置的参数或未设置的、没有明确回退的结果都会导致异常。
示例
<?php // define an Event Event::forge('triggerOnThis')->setCall(function($result){ $increment = $result->getParam('increment') $increment++; $result->setParam($increment); $result->set($increment); }); // define another Event editing the parameters with lower priority (lower number is higher priority, default is 5) Event::forge('triggerOnThis')->setCall(function($result){ $increment = $result->getParam('increment') $increment++; $result->set($increment); })->priority(8); // the Hook triggers it $result = Hook::forge('triggerOnThis') ->setParam('increment', 0) ->execute(); // echoes 2 (we increased the number in each event) echo $result->get(); // echoes 1 (we edited the parameter only in the first event) echo $result->getParam('increment');
插件
我们有两个类来处理插件包:Plugin 和 Loader。
以下是如何加载您选择的要运行的插件的示例
<?php $loader = Loader::forge()->setDir('main', '/path/to/plugins/'); $enabled_plugins = array('hongyukeji/fake', 'hongyukeji/kynet'); foreach ($loader->getPlugins('main') as $plugin) { if (in_array($plugin->getConfig('name'), $enabled_plugins)) { $plugin->execute(); } }
了解更多关于 插件 的信息。