国内没人用最新版本,没发现这个逻辑变化?都不在构造函数里判断用户登录的(没发现的你悲剧了)?
帮我看下这个官方回复: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里面的方法构造函数本来就是应该先执行的,好像没什么不对。。。
我翻了下laravel5.3的文档,现在中间件都是在构造后执行,要么你换成其他低版本,要么不用中间件,或者把你原来构造函数要调用的方法都写在中间件里。
举个栗子:(注意:该特性需要laravel版本5.3.4以上)