在Swoft框架中使用中間件非常簡單,只需按照以下步驟操作:
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;
}
}
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配置中的中間件會按照添加的順序依次執行,處理請求時會先執行前面的中間件邏輯,然后再執行后面的中間件邏輯。