tonini46/laravel-hooks-plus

Laravel 中的 WordPress 过滤器、动作系统

v1.0.1 2024-08-26 10:37 UTC

This package is auto-updated.

Last update: 2024-09-26 11:06:46 UTC


README

Laravel 中的 WordPress 过滤器、动作系统。

关于

  • 动作中断代码流以执行某些操作,然后返回正常流程而不会进行任何修改。
  • 过滤器用于以特定方式修改某些内容,以便稍后代码可以使用该修改。

了解更多关于过滤器和动作的信息

钩子是一种让一段代码在特定的、预定义的位置与另一段代码交互/修改的方法。

安装

composer require tonini46/laravel-hooks-plus

完成!现在您可以使用 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 是参数,每次您监听动作时都会找到它。这些可以是任何东西。

要监听您的动作,您需要附加监听器。这些最好添加到您的 AppServiceProviderboot() 方法中。

例如,如果您想连接到上述钩子,您可以这样做:

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());
    }
}

现在,在应用的入口点,如任何模块或插件中,您可以修改这个已发布的帖子查询。

在模块或插件的service provider(最好是boot方法)中,我们将添加一个监听器来监听过滤器。

class ModuleServiceProvider extends ServiceProvider
{
    public function boot()
    {
        add_filter('posts_published', function($query) {
            return $query->where('status', 'active');
        });
    }
}

许可协议

MIT许可协议(MIT)。请参阅许可文件获取更多信息。