Laravel可终止中间件和后中间件的区别

Laravel difference between terminable middleware and after middleware

Larave middleware understanding source

这里提到,中间件有两种类型:Before和After。处理请求之前处理中间件之前,处理请求之后处理中间件之后。

但是terminable中间件的功能和after中间件完全一样。那么这两者的核心区别是什么?谢谢

Terminable Middleware 在响应准备就绪后运行。

After Middleware 在请求之后但响应准备好之前运行。

例如,假设您要对所有或一组响应设置响应 header,您可以使用后中间件来实现。因为您需要在呈现请求之后但在 return 响应之前设置 header。 但是,如果您想将 session 数据存储在存储中,则可以使用可终止的中间件。

这是TerminableInterface中的终止方法:

/**
 * Terminates a request/response cycle.
 *
 * Should be called after sending the response and before shutting down the kernel.
 */
public function terminate(Request $request, Response $response);

您在 Terminable 中间件的终止方法中收到请求和响应 object,但是更改响应不会生效,因为响应已经 returned。