【发布时间】:2015-09-12 23:31:21
【问题描述】:
Laravel 5 documentation 描述了两种分配中间件的方法:
- 将中间件分配给控制器的路由。
- 在控制器的构造函数中指定中间件。
然而,我意识到任何写在控制器 __construct() 函数中的代码都会在 Middleware 之前运行,即使 Middleware 是在第一行声明的控制器的__construct 函数。
我在 Laravel github 存储库中找到了一个 bug report 来解决类似的问题。然而,一位合作者关闭了该问题,并指出“这是预期的行为。”。
我认为middleware 应该是应用程序之外的“层”,而__construct 函数是应用程序的一部分。
为什么__construct 函数在中间件之前执行(假设它是在中间件运行之前声明的)?为什么会出现这种情况?
【问题讨论】:
-
我只是做了一些测试来确认。如果您希望中间件在您的控制器
__construct()之前执行,您需要将中间件分配给路由。否则它将始终在__construct()的末尾执行,即使分配在construct()的第一行。 -
我创建了一个快速示例来概述您所描述的内容,请随时将其添加到您的问题中。 notehub.org/2015/6/26/say-we-have-a-controller----welcomecontr
-
@Jeemusu 感谢您的评论。是的,我还发现了两种分配中间件的方式之间的差异。但是,通过将中间件放在构造函数中执行流程的末尾,是否违反了请求生命周期(laravel.com/docs/5.1/lifecycle),因为调度请求应该在末尾?
标签: php laravel laravel-5 laravel-middleware