博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
laravel构造函数和中间件执行顺序问题
阅读量:5942 次
发布时间:2019-06-19

本文共 1557 字,大约阅读时间需要 5 分钟。

今天想重构下代码结构:                BaseController.php 放置公共的中间件          class BaseController          {              public function __construct(){                  $this->middleware('login');                }          }                IndexController.php 继承 BaseController          class IndexController extends BaseController          {              $user;  // 存储登录用户实例              public function __construct(){                  parent::__constuct();                  $this->user = Auth::user();              }          }                --------------------                如上代码,一直报错!提示获取不到用户实例!          各种测试,kernel.php, route.php, BaseController, middleware写法,等等,找不到问题。甚至一度怀疑 parent::__contruct()继承不对...                最终发现,是构造函数和中间件的执行顺序有问题:              1.先执行构造函数              2.再调用中间件          所以,我的问题就是,login中间件要求用户登录,而构造函数又先执行了,直接获取用户信息,还未登录呢!                      百度发现一篇文章,描述了这个问题:              https://laravel-china.org/topics/3218/laravel53-middleware-and-controller-construction-method-execution-sequence-problem                /*              它里面提到了一句:                  不可在构造函数中,直接获取到session变量或认证后的用户实例!因为中间件还未启动!                    这个描述的不准确!                  在用户登录后,构造函数中,自然就获取到session变量或认证后的用户实例!                    主要还是中间件未在之前执行!说白了就是顺序的问题!          */                解决方法:              都只能在route.php 中了                  1>要么使用 route::get()->middle('login')                  2>要么使用 route::get(['middleware' => 'login', xxx])              最好的方法,应该是使用路由组 route::group(['middleware' => 'login'])                    或者是:                  抛弃在控制器中使用用户实例

 

转载地址:http://yamtx.baihongyu.com/

你可能感兴趣的文章
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
apache prefork模式优化错误
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
JS页面刷新保持数据不丢失
查看>>
清橙A1202&Bzoj2201:彩色圆环
查看>>
使用data pump工具的准备
查看>>
springMVC---级联属性
查看>>
get和post区别
查看>>
crontab执行shell脚本日志中出现乱码
查看>>
cmd.exe启动参数说明
查看>>
《随笔记录》20170310
查看>>
网站分析系统
查看>>
从零开始来看一下Java泛型的设计
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
3.1
查看>>
校验表单如何摆脱 if else ?
查看>>