laravel 前置中间件 后置中间件,laravel 中间件用来做什么

  laravel 前置中间件 后置中间件,laravel 中间件用来做什么

  IndexController.php继承了BaseController。

  class IndexController扩展BaseController

  $用户;//存储登录用户实例

  公共函数__construct(){

  父级:_ _ construct();

  $ this-user=Auth:user();

  -

  正如上面的代码,它不断报错!提示无法获取用户实例!

  各种测试,kernel.php,route.php,BaseController,中间件等。找不到问题。我甚至一度怀疑parent:__contruct()的继承是错误的。

  最后发现构造器和中间件的执行顺序有问题:

  1.首先执行构造函数。

  2.再次调用中间件

  所以,我的问题是,登录中间件需要用户登录,先执行构造函数直接获取用户信息。它还没有登录!

  百度找到一篇描述这个问题的文章:

  https://laravel-China . org/topics/3218/laravel 53-中间件和控制器-构造-方法-执行-序列-问题

  里面提到了一句话:

  不能直接在构造函数中获取session变量或者认证用户实例!因为中间件还没有启动!

  这个描述不准确!

  用户登录后,在构造函数中,自然会获得会话变量或者认证用户实例!

  或者之前没有执行主中间件!说白了就是秩序问题!

  解决方法:

  都在route.php

  1或使用route:get()- middle(login )

  要么使用route:get([ middleware = log in ,XXX])

  最好的方法是使用路由组route:group([ middleware = log in ])

  或者:

  丢弃控制器中使用的用户实例

laravel 前置中间件 后置中间件,laravel 中间件用来做什么