【问题标题】:How does Laravel know whether a middleware should be run after the request handled?Laravel 如何知道在请求处理后是否应该运行中间件?
【发布时间】:2019-03-30 12:43:49
【问题描述】:

我阅读了源代码,只有一个管道将所有中间件作为数组读取。这些中间件应该在请求之前运行dispatchToRouter.

return (new Pipeline($this->app))
    ->send($request)
    ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
    ->then($this->dispatchToRouter()); 

但是,如果我创建了后中间件,则后中间件应在处理请求后运行。在 laravel 源代码中执行 after-middleware 的时间是什么时候?

【问题讨论】:

    标签: laravel laravel-middleware


    【解决方案1】:

    根据laravel官方文档,

    中间件是在请求之前还是之后运行取决于中间件本身。

    所以,基本上它取决于中间件的句柄功能。通常我们会在处理请求之前执行中间件,如下所示:

    public function handle($request, Closure $next)
    {
        // Perform some operation for Ex. checking user role
    
        return $next($request);
    }
    

    在上述函数中,我们在发送请求执行操作之前执行一些操作。

    在另一种情况下,中间件将在应用程序处理请求后执行其任务,如下所示:

    public function handle($request, Closure $next)
    {
        $response = $next($request);
    
        // Perform some operation after the request is handled by the application
    
        return $response; /* finally, response is returned */
    }
    

    总而言之,在中间件之前,我们首先执行一些操作,然后向应用程序发送请求以获取响应,然后返回给客户端。在中间件之后,我们首先向应用程序发送请求以获取响应,然后我们执行我们的操作,最后我们将响应从中间件返回给客户端。

    您可以查看官方文档:https://laravel.com/docs/5.8/middleware#defining-middleware

    【讨论】:

    • 感谢您的回复。我理解文档中说如果您返回响应而不是 $next 回调,laravel 将在处理请求后执行它。我真正想知道的是,在 laravel 源代码中执行后中间件的时间(或位置)?
    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 2010-12-21
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多