文档地址:
https://doc.swoft.org/master/zh-CN/http-server/middleware.html
中间件是用于控制 请求到达
和 响应请求
的整个流程的,通常用于对请求进行过滤验证处理,当你需要对请求或响应作出对应的修改或处理,或想调整请求处理的流程时均可以使用中间件来实现
1、创建一个中间件App\Middlewares\ProductMiddleware.php
<?php
namespace App\Middlewares;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Swoft\Http\Message\Middleware\MiddlewareInterface;
use Swoft\Bean\Annotation\Bean;
/**
* @Bean()
*/
class ProductMiddleware implements MiddlewareInterface
{
/**
* Process an incoming server request and return a response, optionally delegating
* response creation to a handler.
*
* @param \Psr\Http\Message\ServerRequestInterface $request
* @param \Psr\Http\Server\RequestHandlerInterface $handler
* @return \Psr\Http\Message\ResponseInterface
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$response = $handler->handle($request);
/**
* withAddedHeader()方法给响应头添加内容
*/
return $response->withAddedHeader('Middleware-Action-Test', 'success');
}
}
从上面代码可以看出 给这个中间件类打上了@Bean()
注解;
在实现的process()
方法中,给response
对象添加了响应头内容。
(更多请求与响应的方法,参考:https://doc.swoft.org/master/zh-CN/http-server/request-response.html)
2、使用中间件
来到我们之前的ProductController
控制器中,给该控制器打上@Middleware(class=ProductMiddleware::class)
注解。
前面说了中间件是用于控制 请求到达 和 响应请求 的整个流程的
,并且在ProductMiddleware
这个中间件里加了特殊的响应头内容。
现在我们来访问ProductController
控制器,看看响应头信息: