中间件

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

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

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

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

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

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

下一节: 命令行