中间件

中间件的原理其实是一个多层嵌套的匿名函数,由一开始调用的函数开始,一直往下调用,直到后面已经没有回调的时候,返回给客户端。

这里面的中间件也是这样的原理,当中间件处理完成后,最后才到路由中的回调,中间件依赖于 middleware 组件,支持 PSR15。

中间件推荐存放在 src/Middleware 目录中,每个中间件必须继承 FastD\Middleware\Middleware 对象,实现 handle 方法。

  1. <?php
  2. namespace FastD\Auth;
  3. use FastD\Middleware\DelegateInterface;
  4. use FastD\Middleware\Middleware;
  5. use Psr\Http\Message\ResponseInterface;
  6. use Psr\Http\Message\ServerRequestInterface;
  7. use FastD\Http\Response;
  8. class BasicAuth extends Middleware
  9. {
  10. /**
  11. * @param ServerRequestInterface $serverRequest
  12. * @param DelegateInterface $delegate
  13. * @return ResponseInterface
  14. */
  15. public function handle(ServerRequestInterface $serverRequest, DelegateInterface $delegate)
  16. {
  17. if (/* logic */ true) {
  18. $delegate($serverRequest);
  19. }
  20. return new Response('hello');
  21. }
  22. }

中间件中,如果返回的结果是一个字符串,则会默认转化成 Psr\Http\Message\ResponseInterface 对象,由中间件调度器进行封装。

因此如果想在中间件中返回不同的格式,那必须返回一个 Psr\Http\Message\ResponseInterface 对象,可自定义。

实现原理可以参考: PSR15

下一节: 命令行