millat / laravel-hooks
Laravel中的WordPress过滤器、动作系统
Requires
- php: ^7.1.3|^8.0
- laravel/framework: ^5.7|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ~3.7|^4.0|^5.0|^6.0|^7.0
- phpunit/phpunit: ^9.5
README
Laravel中的WordPress过滤器、动作系统。
关于
- 动作中断代码流程执行某些操作,然后返回正常流程,不进行任何修改。
- 过滤器用于以特定方式修改某些内容,以便稍后由代码使用。
钩子是代码片段在特定、预定义位置相互交互/修改的途径。
安装
composer require millat/laravel-hooks
完成!现在您可以使用laravel-hooks了
函数
do_action( string $tag, mixed $arg )
此函数调用附加到动作钩子 $tag
的所有函数。通过调用此函数,并指定使用 $tag
参数的新钩子名称,可以创建新的动作钩子。
参数
-
$tag
(字符串) (必需) 要执行的动作名称。 -
$arg
(混合) (可选) 传递给附加到动作的函数的额外参数。默认为空。
add_action( string $tag, callable $callback, int $priority = 10, int $accepted_args = 1 )
动作是Laravel应用程序在执行过程中特定点或特定事件发生时启动的钩子。
参数
-
$tag
(字符串) (必需) 要添加回调的动作名称。 -
$callback
(调用) (必需) 当动作被调用时运行的回调。 -
$priority
(整数) (可选) 用于指定与特定动作关联的函数执行的顺序。较低的数字对应较早的执行,具有相同优先级的函数按添加到动作的顺序执行。默认值:10 -
$accepted_args
(整数) (可选) 函数接受的参数数量。默认值:1
apply_filters( string $tag, mixed $value )
此函数调用附加到过滤器钩子 $tag
的所有函数。通过调用此函数,并指定使用 $tag
参数的新钩子名称,可以创建新的过滤器钩子。
参数
-
$tag
(字符串) (必需) 过滤器钩子的名称。 -
$value
(混合) (必需) 要过滤的值。
add_filter( string $tag, callable $callback, int $priority = 10, int $accepted_args = 1 )
过滤器钩子允许在运行时修改各种类型的数据。
参数
-
$tag
(字符串) (必需) 要添加回调的过滤器的名称。 -
$callback
(调用) (必需) 应用过滤器时运行的回调。 -
$priority
(整数) (可选) 用于指定与特定过滤器关联的函数执行的顺序。较低的数字对应较早的执行,具有相同优先级的函数按添加到过滤器的顺序执行。默认值:10 -
$accepted_args
(整数) (可选) 函数接受的参数数量。默认值:1
如何传递回调函数?
回调函数可以是引用应用程序中类的字符串
MyNamespace\Http\Listener@myHookListener
,数组回调[$object, 'method']
或全局注册的函数global_function
,匿名函数。
使用匿名函数的示例
add_action('user_created', function($user) { $user->sendWelcomeMail(); }, 20, 1);
引用类方法的示例
add_action('user_created', 'MyNamespace\Http\MyClass@myMethod', 20, 1);
使用数组回调的示例
add_action('user_created', [$object, 'myMethod'], 20, 1);
用法
动作
在任何您想要的位置,您都可以在Laravel应用程序中创建新的动作
do_action('user_created', $user);
在这里,user_created
是动作的名称,稍后将在动作监听时使用。而 $user
是参数,每次您监听动作时都会找到这些参数。这些可以是任何内容。
要监听您的动作,您需要附加监听器。这些最好添加到您的 AppServiceProvider
的 boot()
方法中。
例如,如果您想连接到上述钩子,可以这样做
add_action('user_created', function($user) { $user->sendWelcomeMail(); }, 20, 1);
第一个参数必须是动作的名称。第二个参数将是闭包、回调和匿名函数。第三个参数指定与特定动作关联的函数执行的顺序。数字越小,执行越早,具有相同优先级的函数将按照它们被添加到动作中的顺序执行。默认值:10。第四个参数是函数接受的参数数量。默认值:1
过滤器
过滤器必须要有输入数据和输出数据,以确保数据在浏览器中输出(您的内容在输出到浏览器之前可能需要通过其他过滤器)。相比之下,动作与过滤器类似,不需要返回任何内容,尽管也可以通过动作返回数据。
基本上,过滤器是可以在Laravel应用程序中使用的函数,用于传递数据。它们允许开发人员修改特定函数的默认行为。
以下是一个在实际应用程序中如何使用过滤器的示例。
Post.php
是一个模型或类,它构建查询以获取所有已发布的帖子
class Post extend Model { public function getPublished() { return Post::where('published_at', '>', now()); } }
使用过滤器我们可以修改这个查询
class Post extend Model { public function getPublished() { return apply_filters('posts_published', Post::where('published_at', '>', now()); } }
现在,在应用程序的入口点,如任何模块或插件,您可以修改这个已发布帖子查询。
在模块或插件的提供者(最好在boot方法中)我们将添加一个监听器来监听过滤器。
class ModuleServiceProvider extends ServiceProvider { public function boot() { add_filter('posts_published', function($query) { return $query->where('status', 'active'); }); } }
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。