php laravel请求处理管道(装饰者模式)

laravel的中间件使用了装饰者模式。比如,验证维护模式,cookie加密,开启会话等等。这些处理有些在响应前,有些在响应之后,使用装饰者模式动态减少或增加功能,使得框架可扩展性大大增强。

接下来简单举个例子,使用装饰者模式实现维护Session实现。

没有使用装饰者模式,需要对模块(WelcomeController::index方法)进行修改。

class WelcomeController
{
    public function index()
    {
        echo 'session start.', PHP_EOL;
        echo 'hello!', PHP_EOL;
        echo 'session close.', PHP_EOL;
    }
}

使用装饰者模式,$pipeList表示需要执行的中间件数组。关键在于使用了array_reduce函数(http://php.net/manual/zh/function.array-reduce.php

class WelcomeController
{
    public function index()
    {
        echo 'hello!', PHP_EOL;
    }
}
interface Middleware
{
    public function handle(Closure $next);
}
class Seesion implements Middleware
{
    public function handle(Closure $next)
    {
        echo 'session start.', PHP_EOL;
        $next();
        echo 'session close.', PHP_EOL;
    }
}
$pipeList = [
    "Seesion",
];

function _go($step, $className)
{
    return function () use ($step, $className) {
        $o = new $className();
        return $o->handle($step);
    };
}

$go = array_reduce($pipeList, '_go', function () {
    return call_user_func([new WelcomeController(), 'index']);
});
$go();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值