pikart / laravel-hooks
为Laravel设计的简单钩子系统
v0.1.0
2018-11-26 14:54 UTC
Requires
- php: >=7.2
- laravel/framework: >=5.7
Requires (Dev)
- orchestra/testbench: ~3.7
- phpunit/phpunit: ~7.0
This package is auto-updated.
Last update: 2024-09-14 19:04:17 UTC
README
需求
php >= 7.2
laravel >= 5.7
使用composer安装此包。
composer require pikart/laravel-hooks
此包将自动使用Laravel自动发现功能注册服务提供者和别名。
使用发布命令将包配置复制到本地配置
php artisan vendor:publish --provider="Pikart\LaravelHooks\HookServiceProvider"
用法
注册钩子
注册方法接受三个参数
-
合同 (字符串) 必需的
自定义字符串或现有接口名称 -
钩子 (字符串|闭包|Pikart\LaravelHook\Contracts\Hook) 必需的
如果合同是现有接口,则钩子必须是现有类名称或类实例。
注册的类必须实现两个接口。它相关的接口和
钩子接口(Pikart\LaravelHook\Contracts\Hook)。如果钩子是现有类名称,则将使用Laravel服务容器解析类,
因此它可以在构造函数中使用自动实例注入。 -
优先级 (整数) 默认 0
按顺序执行注册的钩子,值越大越先执行。
注册闭包
HookManager::register('hook_name', function( array $args ) { return 'Hello world'; }, 10);
注册类
HookManager::register('hook_name', SomeHookClass::class, 10);
注册实例
HookManager::register('hook_name', new SomeHookClass::class, 10);
注册接口到实现
HookManager::register(SomeHookInterface::class, SomeHookClass::class, 10);
执行
钩子通过钩子方法执行。钩子方法接受两个参数
- 钩子名称 (字符串) 必需的
自定义字符串或现有接口名称 - 参数 (数组)
- 方法 (字符串)
参数用于执行,如果存在类名称,则
使用Laravel服务容器创建其实例
通过自定义名称执行钩子
$output = HookManager::hook('hook_name');
通过自定义名称和参数执行钩子
$user = User::find(1); $output = HookManager::hook('hook_name', [ 'user' => $user]);
通过接口执行钩子
$output = HookManager::hook(SomeHookInterface::class);
通过接口名称和参数执行钩子
$user = User::find(1); $output = HookManager::hook(SomeHookInterface::class, [ 'user' => $user]);
通过接口名称和参数以及自定义方法执行钩子
$user = User::find(1); $output = HookManager::hook(SomeHookInterface::class, [ 'user' => $user], 'someMethod');
获取要执行的钩子
get方法接受三个参数
- 钩子名称 (字符串) 必需的 自定义字符串或现有接口名称
- 参数 (数组)
get方法与hook方法的工作方式相同,但是不执行钩子,返回数组。
获取准备好的钩子
$hooks = HookManager::get(SomeHookInterface::class);
获取带有参数的准备好的钩子
$hooks = HookManager::get(SomeHookInterface::class, [ 'user' => $user ]);
获取原始钩子
$hooks = HookManager::getRaw(SomeHookInterface::class);
测试
vendor/bin/phpunit --testdox