foolz/plugin

PHP 的插件系统,具有级联事件。

1.0.0 2014-04-29 21:30 UTC

This package is auto-updated.

Last update: 2024-09-21 05:59:15 UTC


README

一个非常完整的插件系统,让您可以声称您的应用程序支持插件!

您需要 PHP 5.4 才能使用此插件。您可以通过 ComposerPackagist 安装它。

Build Status

组件

  • 钩子

    将它们放在您的代码中以执行事件。与几个其他包不同,这些钩子允许与数据交互,并且可以持有类的范围。

  • 事件

    当遇到具有相同键的钩子时发生事件。事件接受静态方法、闭包以及优先级,因为 您可以将它们堆叠起来,并且可以相互传递变量

  • 结果

    钩子和事件共享的对象,并返回。它们使您的代码免受神秘的函数参数和更令人困惑的返回值的困扰。

  • 插件

    内部包处理程序。 插件实际上是 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();
	}
}

有关插件更多信息,请参阅 插件