Laravel5.3 中间件和控制器构造方法执行顺序问题

我在项目中创建了一个判断移动端还是PC端的中间件,然后发现中间件在控制器构造方法执行完后才调用了,然后重新建了个项目试了下。

class WebInit
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
    dump('a');
    return $next($request);
}
}   

然后控制器里

class MainController extends Controller
{
  public function __construct()
{
    dump('b');
}
public function index(){
    dump('c');

}
}

最后访问一下本地

file

然后找了一下5.3的变更文档发现

file
想问一下laravel5.3以后这么处理的原因是什么,感觉这样想获取数据要每个方法都要从request里获取值挺麻烦的

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6

我也遇到同样的问题。不知道有没有解决方案,本打算在中间层里从容器里拿到已经实例化好的controller对象,但也找不到路子。

5年前 评论
Complicated

为什么要这么做啊!控制器的构造早于中间件,那中间件的过滤作用不就没用了吗

5年前 评论

@Complicated 不啊,构造方法是在实例化的时候执行的,而request请求的是实例化后的其他方法,这不冲突啊,只是方便了在一个类中统一使用一个中间件,说到底是更方便了啊

5年前 评论
Complicated

@AbleYu 没提明白你说的意思(捂脸),,我就是想说,,有些时候吧,需要在构造函数里获取session,然后查询数据库,但是在中间件判断sesssion有没有值,没有值直接到登录界面!但是如果controller的构造函数早于中间件,那这样不就不行了

5年前 评论

@Complicated 在构造函数调用中间件

5年前 评论
Complicated

@AbleYu 你的意思是在 构造函数里定义中中间件还是在构造函数里绑定中间件?

5年前 评论
AbleYu 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!