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函数。

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();

更多PHP相关知识,请访问PHP中文网!

更多相关文章

  1. 关于PHP中单例模式的实现
  2. Java代理模式
  3. 《大型网站系统与Java中间件》读书笔记 (二)
  4. 《大型网站系统与Java中间件》读书笔记(上)
  5. 你还在代码里做读写分离么,试试这个中间件吧!
  6. 一分钟学会《模板方法模式》
  7. 三分钟学会门面模式!
  8. 策略模式原来就这么简单!
  9. 3.docker网络模式,桥接模式

随机推荐

  1. 最近学到的几个Excel可视化骚操作,必须分
  2. Python爬虫自动化,帮小姐姐解放双手
  3. 同学,你这简历上没项目啊!
  4. 详解 Python 的二元算术运算,为什么说减法
  5. Python 为什么能支持任意的真值判断?
  6. 一个在交流群里讨论过两轮的问题,答案竟然
  7. Python 函数为什么会默认返回 None?
  8. 【软考高级知识点】第一章.信息化和信息
  9. 老板又出难题,气得我写了个自动化软件
  10. 详解增强算术赋值:“-=”操作是怎么实现的