blessing/过滤器

用于设计插件系统的过滤器API。

v1.3.0 2023-05-30 04:45 UTC

This package is auto-updated.

Last update: 2024-09-30 01:29:58 UTC


README

用于设计和创建Laravel中的插件系统的过滤器API。

我们在祝福皮肤服务器中使用了这个。

"过滤器API"与WordPress的过滤器API类似,但提供不同的API。此包是为Laravel设计的,因此如果您不在Laravel环境中使用它,可能无法正常工作。

💿 安装

运行Composer

composer require blessing/filter

🔨 使用方法

利用Laravel的自动发现功能,您无需手动配置Laravel应用程序。

目前此包不提供Facade。您必须通过在控制器中使用类型提示或使用全局resolve()辅助函数来获取实例。

例如

use Blessing\Filter;

class MyController extends Controller
{
    public function home(Filter $filter)
    {
        //
    }
}

添加过滤器

要为指定的钩子添加过滤器,只需调用add方法

$filter->add('hook_name', function ($value) {
    return $value;
});

请注意,过滤器处理程序必须返回一个值;否则,应用后的值将为null

您还可以传递一个具有名为filter的公共方法的类作为处理程序。

class MyFilter
{
    public function filter($value)
    {
        return $value;
    }
}

$filter->add('hook_name', MyFilter::class);
// or
$filter->add('hook_name', 'MyFilter');

该类将从Laravel的服务容器中解析出来,因此您可以在类的构造函数中使用类型提示来解析依赖项。

此外,您还可以指定过滤器处理程序的优先级。更大的整数值表示它应该具有更高的优先级。

默认优先级为20

$filter->add('hook_name', function ($value) {
    return $value;
}, 30);  // Higher than default priority.

应用钩子

您可以通过调用apply方法来应用钩子

$value = $filter->apply('hook_name', 'hi');

然后,您传递的第二个参数将受过滤器的影响。

您还可以传递额外的参数作为数组

$value = $filter->apply('hook_name', 'hi', [$arg1, $arg2]);

这些额外参数不会受过滤器的影响。

移除所有过滤器

要为指定的钩子移除所有过滤器,只需

$filter->remove('hook_name');

完全...

这是一个完整的示例

$filter->add('hook_name', function ($value, $arg1, $arg2) {
    if ($arg1 === '...') {
        return $value;
    }

    return $value.'!';
});

$value = $filter->apply('hook_name', 'hi', ['abc', 'def']);
// You should get the text "hi!" here.

📄 许可证

MIT许可证 (c) 祝福皮肤团队