阅读量:9
在Swoft框架中使用中间件非常简单,只需按照以下步骤操作:
- 创建一个中间件类,例如MyMiddleware,继承于Swoft\Http\Server\Middleware\Middleware类,并实现handle方法。
use Swoft\Http\Server\Contract\RequestHandlerInterface; use Swoft\Http\Server\Middleware\Middleware; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; class MyMiddleware extends Middleware { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // 在处理请求之前执行的逻辑 // 可以修改Request对象 // 可以返回Response对象 $response = $handler->handle($request); // 在处理请求之后执行的逻辑 // 可以修改Response对象 return $response; } }
- 在配置文件中注册中间件,打开config/properties/app.php文件,找到http.middleware,添加自定义中间件类名。
return [ // ... 'http' => [ 'middlewares' => [ // ... \App\Middleware\MyMiddleware::class, // ... ], ], ];
- 在控制器或路由中使用中间件,可以在控制器注解中指定中间件。
use Swoft\Http\Message\Request; use Swoft\Http\Message\Response; use Swoft\Http\Server\Annotation\Mapping\Controller; use Swoft\Http\Server\Annotation\Mapping\RequestMapping; use Swoft\Http\Server\Annotation\Mapping\Middleware; /** * @Controller() */ class MyController { /** * @RequestMapping(route="/test") * @Middleware(\App\Middleware\MyMiddleware::class) */ public function test(Request $request, Response $response) { // 控制器逻辑 } }
这样就能够在Swoft框架中使用中间件了。middlewares配置中的中间件会按照添加的顺序依次执行,处理请求时会先执行前面的中间件逻辑,然后再执行后面的中间件逻辑。