【问题标题】:Laravel difference between terminable middleware and after middlewareLaravel 可终止中间件和后中间件的区别
【发布时间】:2018-10-09 07:15:53
【问题描述】:

Larave middleware understanding source

上面提到了,中间件有两种类型:Before和after。处理请求前处理中间件前,处理请求后处理中间件后。

但可终止中间件的功能与中间件完全一样。那么这两者的核心区别是什么?谢谢。

【问题讨论】:

    标签: laravel laravel-5.6 laravel-middleware


    【解决方案1】:

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

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

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

    这是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中间件的terminate方法中收到请求和响应对象,但是更改响应不会生效,因为响应已经返回。

    【讨论】:

    • 感谢@Farzin 的精彩解释。
    • @Farzin 会终止中间件会减慢对浏览器的响应吗?假设我在可终止的中间件中调用外部 API,这会减慢我的响应速度吗?
    猜你喜欢
    • 2016-02-24
    • 2016-05-03
    • 2013-10-12
    • 1970-01-01
    • 2021-09-23
    • 2016-07-31
    • 2018-03-25
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多