millat/laravel-hooks

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

1.3.2 2024-09-06 08:00 UTC

This package is auto-updated.

Last update: 2024-09-06 08:02:27 UTC


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 是参数,每次您监听动作时都会找到这些参数。这些可以是任何内容。

要监听您的动作,您需要附加监听器。这些最好添加到您的 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());
    }
}

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

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

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

许可证

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