laravel - 5.3中间件执行流程重大改变!

查看:322
本文介绍了laravel - 5.3中间件执行流程重大改变!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

国内没人用最新版本,没发现这个逻辑变化?都不在构造函数里判断用户登录的(没发现的你悲剧了)?
帮我看下这个官方回复:https://github.com/laravel/fr...
**我英文不好!解释下!laravel5.3很重要的改进
为什么这么做?
我应该怎么写新的逻辑?**
我需要这样改进的理由,还有我怎么解决我的逻辑!

疑问这样做就是废了__construct
那么中间件的except应该加到中间件作为一个属性比较合理!
protected $except =['login','register','oauth_callback'];
纠结:加了这个觉得不合理(多个组调用这个的话就不合理了),不加这个吧为了一个登陆写__construct又觉得不好!

目前答案:1楼的其实也可以,不过这个优雅多了
callAction说明:https://laravel.com/api/maste...

laravel 5.3,反正是最新的,每次都update!
现在有这3个,中间件,控制器,构造函数
有2个函数必须在构造函数里实例化。而且必须登录状态下,不登录不准实例化。
构造函数:

中间件:

方法:

输出:


路由里


自定义中间件

按laravel的逻辑输出:
2构造函数
1中间件
3这是推广

但是这样的话构造函数里没登录就实例化了,而且不管中间件放在哪,都是先运行构造函数再运行中间件的,
我要的结果是:
1中间件,判断登录,没登陆就跳转
2构造函数,登录后实例化
3这是推广,执行推广!
怎么修改逻辑,我要登录后才调用公用方法,没登录的跳转登录(排除注册和登录)!

大概的问题就是laravel必须先运行构函数,然后才可以调用中间件,
那我应该怎么个逻辑才可以实现我的要求的!

$this->wx_api();
$this->agent();

这2个公用的,一般都写到__construct里的吧!

我还是纳闷,按常理,路由器里定义了,判断类里有这个方法,然后这时候调用中间件,然后执行构造函数,然后是方法!怎么会这种流程呢!


粗暴方法问题,看下面的(不能在构造函数里跳转,写echo和exit在laravel你会觉得超级难看,反正我受不了,上面的演示纯粹为了看!)

http://laravelacademy.org/pos...
仔细的想了一下,发现这个完美的破坏了面向对象的职责分离的要求,并成功的提高了耦合度   
因为这句话,我才想使用中间件!(到底哪个好,我是新手,我都不知道怎么说!)


laravel 5.3是构造Middleware -> 构造Controller -> 执行中间件handle -> 执行Controller中间件 -> Controller的方法,所以中间件是在构造函数后执行的

解决方案

国内我在用最新版5.3

5.3的确改变了中间件的实现逻辑

路由匹配 - 读取路由中间件 - 实例化Controller - 读取Controller中间键 - 执行中间件 - 执行action

个人不鼓励在Controller的构造函数中初始化方法,除了使用中间件调用之外,不要做任何逻辑判断的事情。

重写 CallAction 在 CallAction中逻辑判断

因为任何一个路由的匹配都会使用CallAction调取Controller里面的方法

在5.3以下 版本中,会优先执行中间件,然后初始化Controller,这是和5.3最大的区别。

这篇关于laravel - 5.3中间件执行流程重大改变!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆