filips123 / eventy
经典(纯)PHP中的WordPress钩子系统
Requires
- php: >= 5.4.0
Requires (Dev)
- phpunit/phpunit: >= 4.8.36
- squizlabs/php_codesniffer: ^3.0
README
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'
。