Pipeline 管道
<?php
interface Middleware
{
public static function handle(Closure $next);
}
class VerifyCsrfToken implements Middleware
{
public static function handle(Closure $next)
{
echo "验证Csrf-Token".'<br>';
$next();
}
}
class ShareErrorsFromSession implements Middleware
{
public static function handle(Closure $next)
{
echo "如果session中有'errors'变量, 则共享它".'<br>';
$next();
}
}
class StartSession implements Middleware
{
public static function handle(Closure $next)
{
echo "开启session, 获取数据".'<br>';
$next();
echo "保存数据, 关闭session".'<br>';
}
}
class AddQueuedCookiesToResponse implements Middleware
{
public static function handle(Closure $next)
{
$next();
echo "添加下一次请求需要的cookie".'<br>';
}
}
class EncryptCookies implements Middleware
{
public static function handle(Closure $next)
{
echo "对输入请求的cookie进行解密".'<br>';
$next();
echo "对输出响应的cookie进行加密".'<br>';
}
}
class CheckForMaintenanceMode implements Middleware
{
public static function handle(Closure $next)
{
echo "确定当前程序是否处于维护状态".'<br>';
$next();
}
}
// $stack 即 $carry
function getSlice()
{
return function($stack, $pipe)
{
// 输出 $carry
var_dump($stack());
return function() use ($stack, $pipe)
{
return $pipe::handle($stack);
};
};
}
function then()
{
$pipes = [
"CheckForMaintenanceMode",
"EncryptCookies",
"AddQueuedCookiesToResponse",
"StartSession",
"ShareErrorsFromSession",
"VerifyCsrfToken"];
$firstSlice = function(){
echo "<br>请求向路由器传递, 返回响应 <br><br>";
};
$pipes = array_reverse($pipes);
call_user_func(
array_reduce($pipes, getSlice(), $firstSlice)
);
}
then();
第一次执行默认值 $firstSlice
carry
携带上次迭代里的值; 如果本次迭代是第一次,那么这个值是 initial。
item
携带了本次迭代的值。
initial
如果指定了可选参数 initial,该参数将在处理开始前使用,或者当处理结束,数组为空时的最后一个结果。
请求向路由器传递, 返回响应
D:\wamp\www\foo.php:61:null
验证Csrf-Token
请求向路由器传递, 返回响应
D:\wamp\www\foo.php:61:null
如果session中有'errors'变量, 则共享它
验证Csrf-Token
请求向路由器传递, 返回响应
D:\wamp\www\foo.php:61:null
开启session, 获取数据
如果session中有'errors'变量, 则共享它
验证Csrf-Token
请求向路由器传递, 返回响应
保存数据, 关闭session
D:\wamp\www\foo.php:61:null
开启session, 获取数据
如果session中有'errors'变量, 则共享它
验证Csrf-Token
请求向路由器传递, 返回响应
保存数据, 关闭session
添加下一次请求需要的cookie
D:\wamp\www\foo.php:61:null
对输入请求的cookie进行解密
开启session, 获取数据
如果session中有'errors'变量, 则共享它
验证Csrf-Token
请求向路由器传递, 返回响应
保存数据, 关闭session
添加下一次请求需要的cookie
对输出响应的cookie进行加密
D:\wamp\www\foo.php:61:null
确定当前程序是否处于维护状态
对输入请求的cookie进行解密
开启session, 获取数据
如果session中有'errors'变量, 则共享它
验证Csrf-Token
请求向路由器传递, 返回响应
保存数据, 关闭session
添加下一次请求需要的cookie
对输出响应的cookie进行加密
上一篇: sklearn pipeline
下一篇: pipeline tools