istianxin/decorator-laravel

在 Laravel 中装饰你的方法/函数

v1.0.0 2020-01-22 11:01 UTC

This package is auto-updated.

Last update: 2024-09-22 22:22:39 UTC


README

测试覆盖率

通过在 Laravel 中使用中间件来装饰你的函数/方法。

通过 Composer 安装

composer require istianxin/decorator-laravel

快速入门

定义中间件

你可以定义一个类似于 Laravel 中间件 的中间件。需要注意的是,handle 方法的第一个参数不是 \Illuminate\Http\Request,而是一个数组,包含要装饰的方法/函数的参数。除了这一点,其他都与 Laravel 中间件相同。

以下是一个示例

class MultiplicationMiddleware
{
    public function handle($data, $next, $factor = 1)
    {
        return $next($data) * $factor;
    }
}

回调和参数

除了中间件,装饰器还接受两个其他参数,回调和参数,它们也是 app()->call() 的前两个参数。

回调是一个可调用对象,可以通过 app()->call()call_user_func_array() 调用,例如:DummyClass@method、一个闭包、[Dummyclass::class,staticMethod][new DummyClass(), method]DummyClass::staticMethod

参数是回调的参数数组。

示例

单个中间件

$class = new class {
    public function add($a, $b)
    {
        return $a + $b;
    }
};
$a = 1;
$b = 2;
$factor = 3;

$decorator = new Decorator();
// classname with parameter
$middleware = MultiplicationMiddleware::class . ':' . $factor;
$result = $decorator->setCallback([$class, 'add'])
    ->setMiddleware($middleware)
    ->setParameters([$a, $b])
    ->decorate();
echo $result; // 9

多个中间件

$decorator->setMiddleware([
    $object_middleware1,
    middleware2::class,
    middleware3:class:param1,param2,
    $closure_middleware4
]);

或者

$decorator->setMiddleware([
    $object_middleware1,
    middleware2::class
])->appendMiddleware([
    middleware3:class:param1,param2,
    $closure_middleware4
])

查看更多 测试用例