filips123/eventy

0.6 2018-10-29 21:24 UTC

This package is auto-updated.

Last update: 2024-09-16 21:20:26 UTC


README

Latest Stable Version Latest Untable Version Total Downloads License PHP

Linux Build Status Windows Build Status Code Coverage Code Quality

WordPress风格的动作和过滤器在经典(纯)PHP中。

关于

动作是您想在代码中的某些点执行的代码片段。动作从不返回任何内容,只是提供了一个选项,可以在不破坏现有代码的情况下将其钩入。

过滤器是为了修改实体而设计的。它们总是返回某种类型的值。默认情况下,它们返回它们的第一个参数,您也应该这样做。

了解更多关于过滤器

了解更多关于动作

此项目是从Eventy for Laravel分叉而来。区别在于,该项目支持PHP 5.4或更高版本,并且没有任何依赖项。此外,还有一些语法上的差异。

用例

EventyClassic最好用作允许代码扩展的方式。无论是创建包还是应用程序,Eventy都可以为您带来所需的扩展性。

例如,EventyClassic可以为基于插件的系统打下基础。您提供一个“动作”,允许插件注册自己。您可能会提供一个“过滤器”,以便插件可以更改核心中的数组内容。您甚至可以提供一个“动作”,以便插件可以修改您应用程序的菜单。

安装

要求

EventyClassic需要PHP 5.4.0或更高版本。

使用Composer

安装EventyClassic的推荐方式是使用Composer,PHP的依赖项管理器。

composer require filips123/eventy

您只需要在脚本中包含自动加载器和命名空间。

<?php

use EventyClassic\Events as Eventy;

require 'vendor/autoload.php';

$eventy = new Eventy;

理想情况下,类实例应放置到依赖注入服务中。

手动安装

或者,您可以从GitHub下载文件,然后手动将它们包含到脚本中。

您需要在脚本中包含所有文件和命名空间。

<?php

use EventyClassic\Events as Eventy;

require 'src/Events.php';
require 'src/Event.php';
require 'src/Action.php';
require 'src/Filter.php';

$eventy = new Eventy;

理想情况下,类实例应放置到依赖注入服务中。

用法

动作

要监听钩子,您需要附加监听器。

例如,如果您想钩入上述钩子,您可以这样做

$eventy->addAction('my.hook', function($what) {
    echo 'You are '. $what;
}, 20, 1);

第一个参数是钩子的名称。第二个参数将是回调。这可以是闭包、数组回调([$object, 'method'])或全局注册的函数function_name。第三个参数是钩子的优先级。数字越低,执行越早。第四个参数指定监听器接受的参数数量。

然后您可以运行动作

$eventy->runAction('my.hook', 'awesome');

再次,第一个参数必须是钩子的名称。所有后续参数都作为参数发送到动作。这些可以是您想要的任何内容。例如,您可能希望告诉监听器这被附加到某个模型。然后您可以将此作为其中一个参数传递。

过滤器

过滤器的工作方式与动作非常相似,结构与动作完全相同。最显著的区别是过滤器总是返回其值。

这是将监听器添加到此过滤器的示例

$eventy->addFilter('my.hook', function($what) {
    $what = 'not '. $what;
    return $what;
}, 20, 1);

现在,该过滤器将返回'not awesome'。太棒了!

您可以将此与之前的钩子结合使用

$eventy->addAction('my.hook', function($what) {
    $what = $eventy->runFilter('my.hook', 'awesome');
    echo 'You are '. $what;
});

然后您可以运行过滤器

$value = $eventy->runFilter('my.hook', 'awesome');

如果没有任何监听器连接到此钩子,过滤器将简单地返回 'awesome'