在使用權限認證的時候,咱們會這樣編寫權限類: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