我阅读了源代码,只有一个管道将所有中间件读取为数组。这些中间件应在请求dispatchToRouter.
return (new Pipeline($this->app))
->send($request)
->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
->then($this->dispatchToRouter());
但是,如果我创建了中间件,则应该在处理请求之后运行中间件。在这里以及何时在laravel源代码中执行中间件?
答案 0 :(得分: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