非常にシンプルで実用的なコントローラーの基本クラス
/**- * @desc コントローラー基本クラス
- * @date 2013-05-06
- * @author liudesheng
- */
- define('SYS_PATH') || die('Access Illegal');
- クラスコントローラー
- {
- //現在のコントローラー
- は保護されています $_controller; //現在のアクションメソッド
- protected $_action;
- //パーミッション配列
- protected $_permissions;
- //テンプレートファイル
- private $_layout = 'layout';
- //コンストラクター関数
- function __construct($controller,$action )
- {
- if('Exception' != $controller){
- $this->_controller = $controller;
- $this->_action = $action;
-
- //ログインチェックとアクセス許可制御部分、ログインページは検証を必要としません
- $trust_action = util::c('trust_action');
- if(!isset($trust_action[$this->_controller]) || !in_array($this->_action,$trust_action [ $this->_controller])){
- $this->login();
- //$this->privilege();
- }
- $this->init();
- }else{/ / 例外処理
- $this->Exception($action);
- }
- }
-
- //継承操作に使用される初期化メソッド
- protected function init(){}
-
- //例外処理メソッド
- private functionException( $ msg)
- {
- $this->showErr($msg,$layout);
- }
-
- //ログインを検証
- プライベート関数login()
- {
- if(!$this->isLogin()){
- if($this->isAjax()){
- header('HTTP/1.1 403 Forbidden');
- header("Error-Json:{code:'login'}");
- exit();
- } else {
- $this->redirect('index','login');
- }
- }
- }
-
- //ログインするかどうかを決定
- 保護された最終関数 isLogin()
- {
- $auth = isset($ _COOKIE[' auth'])?$_COOKIE['auth']:'';
- $isLogin = false;
- if($auth){
- $info = trim(file_get_contents('check.txt'));
- if (strcmp( $auth,md5('steve'.$info.util::c('login_auth_suffix'))) == 0){
- $isLogin = true;
- }
- }
- return $isLogin;
- }
-
- //検証権限
- プライベート関数privilege()
- {
- $this->getPermissions();
- if(!$this->isAllow()){
- if($this->isAjax()){
- header(' HTTP/1.1 403 Forbidden');
- header( "Error-Json:{code:'access'}");
- exit();
- }else{
- $this->showErr('申し訳ありませんが、この権限はありません ');
- }
- }
- }
-
- //権限情報を取得
- protected 最終関数 getPermissions()
- {
- $privilege = $this->admin['privilege'];
- $permissions_priv = util::c( 'permissions',$privilege);
- if(!isset($permissions_priv['city'])){
- $this->cityPriv = 'all'; //リストクエリを簡素化するため、将来的にすべての都市の権限を追加することが可能です Select
- }else{
- unset($permissions_priv['city']);
- }
- foreach($permissions['common'] as $ct => $ac) {
- if(isset($permissions_priv[$ct] ) && 'all' == $permissions_priv[$ct])
- continue;
- if('all' == $ac)
- $permissions_priv[$ct] = 'all ';
- else //このケースは配列である必要があり、リソースを節約し、判断を行わないでください
- $permissions_priv[$ct] = isset($permissions_priv[$ct])?array_merge($permissions_priv[$ct],$ac ):$ac;
- }
- $this-> _permissions = $permissions_priv;
- }
-
- //権限の種類に基づいて権限があるかどうかを判断します
- protected 最終関数 isAllow($controller='',$action=' ')
- {
- if(!isset($this->gt;_permissions ))
- $this->getPermissions();
- $allow = false;
- $ct = $controller?$controller:$this->_controller ;
- $ac = $action?$action:$this-> _action;
- $permission_action = $this->_permissions[$ct];
- if($permission_action && ('all' == $permission_action || in_array ($ac,$permission_action) || 'any' == $action ))
- $allow = true;
- return $allow;
- }
-
-
- //保護された関数 showErr($errMsg,$layout = null)
- {
- $this->title = "エラー メッセージ" ;
- $this->errMsg = $errMsg;
- $this->render('error',$layout);
- }
-
- //成功情報ページ
- protected function showSucc($msg,$skipUrl,$skipPage ,$layout = null)
- {
- $this->title = "成功のヒント";
- $this->msg = $msg;
- $ this->skipUrl = $skipUrl;
- $this->skipPage = $skipPage;
- $this->render('success',$layout);
- }
-
- //許可されたリンクを表示
- protected function showPemissionLink( $title,$ct,$ac,$param=array( ),$wrap='')
- {
- if($wrap){
- $wrap_start = '<'.$wrap.'>';
- $ Wrap_end = ''.$wrap.'> ';
- }else{
- $wrap_start = $wrap_end = '';
- }
- if($this->isAllow($ct,$ac))
- echo $wrap_start,'',$title,'',$wrap_end;
- }
-
- //映像解析方法
- protected function render($template = null,$layout = null)
- {
- !is_null($layout ) && $this->_layout = $layout;
- !$template && $template = $this->_controller.'_'.$this->_action;
- ob_start();
- include(MODULE_PATH.'views /'.$this->layout.'.tpl.php');
- $content = ob_get_clean();
- if($this->staticFile){
- file_put_contents($this->staticFile,$content) ;
- }
- echo $content;
- exit;
- }
-
- 保護された関数 showHtml($html,$expire=3600,$path='')
- {
- empty($path) && $path=ROOT_PATH;
- $this ->staticFile = sprintf('%s%s.html',$path,$html);
- $mkhtml = intval($this->_G('mkhtml'));
- if(!$mkhtml){
- if(file_exists($this->staticFile)){
- $fmtime = filemtime($this->staticFile);
- if(time()-$fmtime < $expire && date('Ymd') == date('Ymd',$fmtime)){
- include $this->staticFile;
- exit;
- }
- }
- }
- }
-
- // 生成url
- protected function url($ct='',$ac) ='',$param = array(),$module='')
- {
- return $GLOBALS['app']->url($ct,$ac,$param,$module);
- }
-
- //url跳转
- protected function redirect($ct='',$ac='',$param = array())
- {
- header('location:'.$this->url($ct,$ ac,$param));
- exit();
- }
-
- //url跳转
- 保護関数 redirectUrl($url)
- {
- header('location:'.$url);
- exit();
- }
-
- //バックリダイレクトURL
- protected function getBru()
- {
- return $_COOKIE[util::c('bru_cookie_name')]?$_COOKIE[util::c('bru_cookie_name')]:$this-> ;url();
- }
-
- //否かは ajax请要求
- 保護された関数 isAjax()
- {
- if(isset( $_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
- return true;
- return false;
- }
-
- // json数组
- 保護関数を返す returnJson($data)
- {
- echo json_encode($data);
- exit();
- }
-
- //GET
- 保護関数_G($name)
- {
- return isset($_GET[$name])?util::sanitize($_GET[$name]):'';
- }
- //POST
- 保護された関数 _P($name)
- {
- if(!isset($_POST[$name]) || (is_string($_POST[$name]) && mb_strpos($_POST[$name],'请输入',0,'gbk') === 0)){
- return '';
- }else{
- return util ::sanitize($_POST[$name]);
- }
- }
- //REQUEST
- 保護関数 _R($name)
- {
- return isset($_REQUEST[$name])?util::sanitize($_REQUEST[ $name]):'';
- }
- }
-
复制幣
|