yanselmask / laravel-hooks
Laravel 中的 WordPress 过滤器、动作系统
Requires
- php: ^8.0
- laravel/framework: ^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^9.2
- phpunit/phpunit: ^11.3
This package is auto-updated.
Last update: 2024-09-04 01:23:19 UTC
README
Laravel 中的 WordPress 过滤器、动作系统。
关于
- 动作会中断代码流执行某些操作,然后返回正常流程,而不进行任何修改。
- 过滤器用于以特定方式修改某些内容,以便稍后由代码使用。
钩子是一种让一块代码在特定、预定义的位置与另一块代码交互/修改的方式。
安装
composer require yanselmask/laravel-hooks
完成!现在您可以开始使用laravel-hooks了
函数
do_action( string $tag, mixed $arg )
此函数调用所有附加到动作钩子 $tag
的函数。可以通过调用此函数并指定新钩子的名称来创建新的动作钩子,使用 $tag
参数。
参数
-
$tag
(string) (Required) 要执行的动作名称。 -
$arg
(mixed) (Optional) 传递给附加到动作的函数的额外参数。默认为空。
add_action( string $tag, callable $callback, int $priority = 10, int $accepted_args = 1 )
动作是 Laravel 应用在执行过程中的特定点或特定事件发生时触发的钩子。
参数
-
$tag
(string) (Required) 添加回调的动作名称。 -
$callback
(callable) (Required) 当动作被调用时运行的回调。 -
$priority
(int) (Optional) 用于指定与特定动作关联的函数执行的顺序。数字越小,执行越早,优先级相同的函数按添加顺序执行。默认值:10 -
$accepted_args
(int) (Optional) 函数接受的参数数量。默认值:1
apply_filters( string $tag, mixed $value )
此函数调用所有附加到过滤器钩子 $tag
的函数。可以通过调用此函数并指定新钩子的名称来创建新的过滤器钩子,使用 $tag
参数。
参数
-
$tag
(string) (Required) 过滤器钩子的名称。 -
$value
(mixed) (Required) 要过滤的值。
add_filter( string $tag, callable $callback, int $priority = 10, int $accepted_args = 1 )
过滤器钩子允许在运行时修改各种类型的数据。
参数
-
$tag
(string) (Required) 添加回调的过滤器名称。 -
$callback
(callable) (Required) 应用过滤器时运行的回调。 -
$priority
(int) (Optional) 用于指定与特定过滤器关联的函数执行的顺序。数字越小,执行越早,优先级相同的函数按添加顺序执行。默认值:10 -
$accepted_args
(int) (Optional) 函数接受的参数数量。默认值: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()); } }
现在,在应用程序的入口点,如任何模块或插件的入口点,您可以修改这个已发布的帖子查询。
在模块或插件的提供者(最好在启动方法中)中,我们将添加一个监听器以监听过滤器。
class ModuleServiceProvider extends ServiceProvider { public function boot() { add_filter('posts_published', function($query) { return $query->where('status', 'active'); }); } }
支持我们
我们在视频教程和创建开源软件包上投入了大量资源。如果您喜欢我所做的工作,或者您曾经使用过我所构建的或我的视频中的任何东西,请考虑支持我们。这将使我们能够更多地关注我们正在工作的教程和开源项目。
非常感谢您帮助我们!🥰
许可证
MIT 许可证(MIT)。有关更多信息,请参阅许可证文件。