nulastudio/middleware

该软件包的规范存储库似乎已不存在,因此该软件包已被冻结。

v1.2.2-BETA 2018-07-23 08:17 UTC

This package is auto-updated.

Last update: 2023-01-05 15:43:30 UTC


README

send() --------------------> to() --------------------> finish()
         ^   ^   ^                          ^   ^   ^
         |   |   |                          |   |   |
         |   |   +------- through(Fn) ------+   |   |
         |   +-----------     ...     ----------+   |
         +--------------- through(F1) --------------+

安装

composer require nulastudio/middleware

使用方法

$middleware = new nulastudio\Middleware;

$pack = $middleware->send(1, 2, 3)->to(function (...$goods) {
    echo "goods received\n";
    foreach ($goods as &$good) {
        $good++;
    }
    return $goods;
})->through([function ($next, ...$params) {
    echo "before middleware 1\n";
    $return = $next(...$params);
    echo "after middleware 1\n";
    return $return;
}, function ($next, ...$params) {
    echo "before middleware 2\n";
    $return = $next(...$params);
    echo "after middleware 2\n";
    return $return;
}])->through(function ($next, ...$params) {
    echo "before middleware 3\n";
    $return = $next(...$params);
    echo "after middleware 3\n";
    return $return;
})->finish(function ($origin, $goods) {
    var_dump($origin, $goods);
    return $goods;
})->pack();

$return = $pack();

echo "final return\n";

var_dump($return);

/* outputs */
/*
before middleware 1
before middleware 2
before middleware 3
goods received
after middleware 3
after middleware 2
after middleware 1
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
array(3) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(4)
}
final return
array(3) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(4)
}
*/

可覆盖参数

$middleware = new nulastudio\Middleware;

$pack = $middleware->send()->to(function (...$goods) {
    var_dump($goods);
    return $goods;
})->pack();

$return = $pack(1,2,3);

// or

$pack = $middleware->send(4,5,6)->to(function (...$goods) {
    var_dump($goods);
    return $goods;
})->pack();

$return = $pack(1,2,3);

// output:
// 1,2,3

参考

  • Middleware newInstance 静态方法,返回一个新的 Middleware 实例。
  • Middleware send (...$goods)
    • goods 将传递给 $destination
  • Middleware to (callable $destination)
    • destination 接收两个参数 ($next, $params) 并必须返回新值或 $params$next 是下一个中间件回调,$params 是前一个中间件回调返回的值,第一个中间件回调将获得传递给 send 的值。
  • Middleware reset 清空所有中间件。
  • Middleware through ($anywhere, bool $reset = false)
  • Middleware through ($anywhere, string $name)
  • Middleware through ($anywhere, string $name, bool $reset = false)
  • Middleware through ($anywhere, bool $reset = false, string $name = null)
    • anywhere 一个回调或一组回调。
    • reset 在添加回调之前清空通过回调。
    • name 中间件名称。
  • Middleware finish (callable $todo)
    • todo 完成时做什么。 todo 获取两个参数 ($origin, $goods) 并必须返回新值或 $goods$origin 是传递给 send 的值,$goods 是传递给 to 的可调用的返回值。
  • callable pack ()
    • 将中间件打包成一个可调用的函数。