yanselmask/laravel-hooks

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

dev-main 2024-08-04 01:05 UTC

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

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

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

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

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

支持我们

我们在视频教程和创建开源软件包上投入了大量资源。如果您喜欢我所做的工作,或者您曾经使用过我所构建的或我的视频中的任何东西,请考虑支持我们。这将使我们能够更多地关注我们正在工作的教程和开源项目。

Yanselmask, Inc

非常感谢您帮助我们!🥰

许可证

MIT 许可证(MIT)。有关更多信息,请参阅许可证文件