Thinkphp权限控制类中_initialize()的调用原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thinkphp权限控制类中_initialize()的调用原理相关的知识,希望对你有一定的参考价值。
在使用权限认证的时候,我们会这样编写权限类:
namespace Common\Common\Controller;
use Think\Controller;
use Think\Auth;
class AuthController extends Controller{
protected function _initialize(){
//获取登陆信息
$uid = session(‘uid‘);
if(empty($uid)){
$this->error(‘请先登陆!‘,U(‘Login/index‘),1);
}
//如果是管理员,则不用验证权限了
if(session(‘gids‘) == ‘1‘){
return true;
}
//验证权限
$auth = new Auth();
if(!$auth->check(MODULE_NAME.‘/‘.CONTROLLER_NAME.‘/‘.ACTION_NAME,$uid)){
$this->error(‘没有权限‘,‘‘,1);
}
}
}
当我们初始化权限类的时候,就会自动调用_initialize()函数。。。
但是,_initialize()并不是php原生的初始化自动调用的函数名,而__construct()才是。
我们再打开权限类继承的Controller类,就有如下代码:
public function __construct() {
Hook::listen(‘action_begin‘,$this->config);
//实例化视图类
$this->view = Think::instance(‘Think\View‘);
//控制器初始化
if(method_exists($this,‘_initialize‘))
$this->_initialize();
}
仔细理解:Controller类中也没有_initialize函数,而是在权限类中自定义的这样一个函数。
当我们初始化权限类的时候,同时也就初始化了Controller类,于是触发了__construct,在__construct中就判断是否存在_initialize函数,如果存在,则调用,不存在,则忽略。。。
所以才会有初始化权限类的时候,自动调用_initialize函数!
原创文章:http://bbs.51cto.com/thread-1501917-1.html 欢迎前来讨论!
以上是关于Thinkphp权限控制类中_initialize()的调用原理的主要内容,如果未能解决你的问题,请参考以下文章
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
ThinkPHP实现登录限制时__construct和_initialize的区别
thinkphp5.1控制器初始化函数initialize与构造函数__construct区别