Thinkphp權限控制類中_initialize()的調用原理

在使用權限認證的時候,咱們會這樣編寫權限類:php


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);
                        } 
                }
}html


當咱們初始化權限類的時候,就會自動調用_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函數!session


原創文章:http://bbs.51cto.com/thread-1501917-1.html 歡迎前來討論!ide

相關文章
相關標籤/搜索