最近已经在着手写LayTp2.0版本。主要是把TP内核升级到6.x.x。
目前写到了后台登录。
需求:
需要判断是否已经有了登录凭证,如果没有登录凭证就跳转至登录界面,如果有登录凭证就把凭证信息传递给控制器使用。
这里牵涉到三个控制器,一个中间件。它们分别是:
后台控制器基类,后台登录控制器,后台首页控制器,权限检测中间件
后台登录控制器和后台首页控制器都集成了后台控制器基类
在基类控制器中,定义了一个属性,
/**
* 无需登录的方法,同时也就不需要鉴权了
* @var array
*/
protected $noNeedLogin = [];继承了基类的控制器,后台首页控制器和后台登录控制器可以自行定义这个属性,来设置当前控制器哪些方法不需要登录。
基类控制器需要执行Auth权限验证的中间件,用以拦截请求,判断用户是否已经登录。
底部贴出来的代码是已经实现好的。
注意点:
1.TP6中,如果想要拦截请求,返回json数据或者执行页面跳转,均需要在中间件中实现;
2.为了实现把子类控制器设置的属性传递给基类调用的中间件,需要在基类的初始化方法中给$request对象增加属性这一点就是TP6中,如何在控制器中,直接向他调用的中间件传参的方式。这也是基于PHP是世界上最好的语言才能实现。因为PHP可以动态的增加对象属性。
3.中间件对用户凭证进行判断后,得到的用户对象,需要再次使用return $next($request, $this