laravel - Laravel 如何知道在请求处理后是否应该运行中间件?
问题描述
我阅读了源代码,只有一个管道将所有中间件作为数组读取。这些中间件应该在请求之前运行dispatchToRouter.
return (new Pipeline($this->app))
->send($request)
->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
->then($this->dispatchToRouter());
但是,如果我创建了一个后中间件,则后中间件应该在请求处理后运行。在这里以及何时在 laravel 源代码中执行后中间件?
解决方案
根据 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
推荐阅读
- c# - 使用过滤器属性验证模型
- scala - 在 Scala 中将 null 转换为案例类的实例
- c# - 该平台不支持操作
- angular - MatSort 不使用 Angular 8 对 MatTable 中的数据进行排序
- svn - SVN - 在数据库中找到带有校验和“$sha1$5aa2d91900d7c70f2153f5f907946c7a339”的原始文本,但在磁盘上没有
- node.js - await 不等待执行?
- typescript - Webpack 无法编译 ts 3.7 (Optional Chaining, Nullish Coalescing)
- php - 我是 Laravel 的新手,我想将 SQL 查询转换为 laravel
- ios - SwiftUI - 如何在 SwiftUI 中弹出到特定视图?
- react-native - 如何检查字符串是否包含特定单词?