foolz / plugin
PHP 的插件系统,具有级联事件。
Requires
- php: >=5.4.0
- foolz/package: dev-master
This package is auto-updated.
Last update: 2024-09-21 05:59:15 UTC
README
一个非常完整的插件系统,让您可以声称您的应用程序支持插件!
您需要 PHP 5.4 才能使用此插件。您可以通过 Composer 和 Packagist 安装它。
组件
-
钩子
将它们放在您的代码中以执行事件。与几个其他包不同,这些钩子允许与数据交互,并且可以持有类的范围。
-
事件
当遇到具有相同键的钩子时发生事件。事件接受静态方法、闭包以及优先级,因为 您可以将它们堆叠起来,并且可以相互传递变量。
-
结果
钩子和事件共享的对象,并返回。它们使您的代码免受神秘的函数参数和更令人困惑的返回值的困扰。
-
插件
内部包处理程序。 插件实际上是 Composer 包。 使用引导文件创建新事件和使用安装/卸载/升级钩子。
-
加载器
包实用程序。它将检查您告诉它的文件夹,找到插件,加载它们,并给出数组。
-
PlugSuit(特性)
自动将插件添加到您的类中。它添加了前后钩子,并允许您覆盖传递给方法的自定义参数。
您需要做什么?您必须使用 Loader 类来创建您自己的管理面板并运行您选择的插件。由于它没有任何数据库绑定(或任何依赖),您必须自己创建启用/禁用系统。
以下是一些示例。
您可以通过以下页面深入了解这些说明
钩子和事件
包的最基本部分。您可以在代码的任何地方使用钩子和事件,而不仅仅是插件。
<?php use \Foolz\Plugin\Hook as Hook; use \Foolz\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('foolz/fake', 'foolz/kynet'); foreach ($loader->getPlugins('main') as $plugin) { if (in_array($plugin->getConfig('name'), $enabled_plugins)) { $plugin->execute(); } }
有关插件更多信息,请参阅 插件。