ホームページ > バックエンド開発 > PHPチュートリアル > コントローラーの基本クラス

コントローラーの基本クラス

WBOY
リリース: 2016-07-25 08:47:57
オリジナル
1393 人が閲覧しました
非常にシンプルで実用的なコントローラーの基本クラス
    /**
  1. * @desc コントローラー基本クラス
  2. * @date 2013-05-06
  3. * @author liudesheng
  4. */
  5. define('SYS_PATH') || die('Access Illegal');
  6. クラスコントローラー
  7. {
  8. //現在のコントローラー
  9. は保護されています $_controller; //現在のアクションメソッド
  10. protected $_action;
  11. //パーミッション配列
  12. protected $_permissions;
  13. //テンプレートファイル
  14. private $_layout = 'layout';
  15. //コンストラクター関数
  16. function __construct($controller,$action )
  17. {
  18. if('Exception' != $controller){
  19. $this->_controller = $controller;
  20. $this->_action = $action;
  21. //ログインチェックとアクセス許可制御部分、ログインページは検証を必要としません
  22. $trust_action = util::c('trust_action');
  23. if(!isset($trust_action[$this->_controller]) || !in_array($this->_action,$trust_action [ $this->_controller])){
  24. $this->login();
  25. //$this->privilege();
  26. }
  27. $this->init();
  28. }else{/ / 例外処理
  29. $this->Exception($action);
  30. }
  31. }
  32. //継承操作に使用される初期化メソッド
  33. protected function init(){}
  34. //例外処理メソッド
  35. private functionException( $ msg)
  36. {
  37. $this->showErr($msg,$layout);
  38. }
  39. //ログインを検証
  40. プライベート関数login()
  41. {
  42. if(!$this->isLogin()){
  43. if($this->isAjax()){
  44. header('HTTP/1.1 403 Forbidden');
  45. header("Error-Json:{code:'login'}");
  46. exit();
  47. } else {
  48. $this->redirect('index','login');
  49. }
  50. }
  51. }
  52. //ログインするかどうかを決定
  53. 保護された最終関数 isLogin()
  54. {
  55. $auth = isset($ _COOKIE[' auth'])?$_COOKIE['auth']:'';
  56. $isLogin = false;
  57. if($auth){
  58. $info = trim(file_get_contents('check.txt'));
  59. if (strcmp( $auth,md5('steve'.$info.util::c('login_auth_suffix'))) == 0){
  60. $isLogin = true;
  61. }
  62. }
  63. return $isLogin;
  64. }
  65. //検証権限
  66. プライベート関数privilege()
  67. {
  68. $this->getPermissions();
  69. if(!$this->isAllow()){
  70. if($this->isAjax()){
  71. header(' HTTP/1.1 403 Forbidden');
  72. header( "Error-Json:{code:'access'}");
  73. exit();
  74. }else{
  75. $this->showErr('申し訳ありませんが、この権限はありません ');
  76. }
  77. }
  78. }
  79. //権限情報を取得
  80. protected 最終関数 getPermissions()
  81. {
  82. $privilege = $this->admin['privilege'];
  83. $permissions_priv = util::c( 'permissions',$privilege);
  84. if(!isset($permissions_priv['city'])){
  85. $this->cityPriv = 'all'; //リストクエリを簡素化するため、将来的にすべての都市の権限を追加することが可能です Select
  86. }else{
  87. unset($permissions_priv['city']);
  88. }
  89. foreach($permissions['common'] as $ct => $ac) {
  90. if(isset($permissions_priv[$ct] ) && 'all' == $permissions_priv[$ct])
  91. continue;
  92. if('all' == $ac)
  93. $permissions_priv[$ct] = 'all ';
  94. else //このケースは配列である必要があり、リソースを節約し、判断を行わないでください
  95. $permissions_priv[$ct] = isset($permissions_priv[$ct])?array_merge($permissions_priv[$ct],$ac ):$ac;
  96. }
  97. $this-> _permissions = $permissions_priv;
  98. }
  99. //権限の種類に基づいて権限があるかどうかを判断します
  100. protected 最終関数 isAllow($controller='',$action=' ')
  101. {
  102. if(!isset($this->gt;_permissions ))
  103. $this->getPermissions();
  104. $allow = false;
  105. $ct = $controller?$controller:$this->_controller ;
  106. $ac = $action?$action:$this-> _action;
  107. $permission_action = $this->_permissions[$ct];
  108. if($permission_action && ('all' == $permission_action || in_array ($ac,$permission_action) || 'any' == $action ))
  109. $allow = true;
  110. return $allow;
  111. }
  112. //保護された関数 showErr($errMsg,$layout = null)
  113. {
  114. $this->title = "エラー メッセージ" ;
  115. $this->errMsg = $errMsg;
  116. $this->render('error',$layout);
  117. }
  118. //成功情報ページ
  119. protected function showSucc($msg,$skipUrl,$skipPage ,$layout = null)
  120. {
  121. $this->title = "成功のヒント";
  122. $this->msg = $msg;
  123. $ this->skipUrl = $skipUrl;
  124. $this->skipPage = $skipPage;
  125. $this->render('success',$layout);
  126. }
  127. //許可されたリンクを表示
  128. protected function showPemissionLink( $title,$ct,$ac,$param=array( ),$wrap='')
  129. {
  130. if($wrap){
  131. $wrap_start = '<'.$wrap.'>';
  132. $ Wrap_end = ' ';
  133. }else{
  134. $wrap_start = $wrap_end = '';
  135. }
  136. if($this->isAllow($ct,$ac))
  137. echo $wrap_start,'',$title,'',$wrap_end;
  138. }
  139. //映像解析方法
  140. protected function render($template = null,$layout = null)
  141. {
  142. !is_null($layout ) && $this->_layout = $layout;
  143. !$template && $template = $this->_controller.'_'.$this->_action;
  144. ob_start();
  145. include(MODULE_PATH.'views /'.$this->layout.'.tpl.php');
  146. $content = ob_get_clean();
  147. if($this->staticFile){
  148. file_put_contents($this->staticFile,$content) ;
  149. }
  150. echo $content;
  151. exit;
  152. }
  153. 保護された関数 showHtml($html,$expire=3600,$path='')
  154. {
  155. empty($path) && $path=ROOT_PATH;
  156. $this ->staticFile = sprintf('%s%s.html',$path,$html);
  157. $mkhtml = intval($this->_G('mkhtml'));
  158. if(!$mkhtml){
  159. if(file_exists($this->staticFile)){
  160. $fmtime = filemtime($this->staticFile);
  161. if(time()-$fmtime < $expire && date('Ymd') == date('Ymd',$fmtime)){
  162. include $this->staticFile;
  163. exit;
  164. }
  165. }
  166. }
  167. }
  168. // 生成url
  169. protected function url($ct='',$ac) ='',$param = array(),$module='')
  170. {
  171. return $GLOBALS['app']->url($ct,$ac,$param,$module);
  172. }
  173. //url跳转
  174. protected function redirect($ct='',$ac='',$param = array())
  175. {
  176. header('location:'.$this->url($ct,$ ac,$param));
  177. exit();
  178. }
  179. //url跳转
  180. 保護関数 redirectUrl($url)
  181. {
  182. header('location:'.$url);
  183. exit();
  184. }
  185. //バックリダイレクトURL
  186. protected function getBru()
  187. {
  188. return $_COOKIE[util::c('bru_cookie_name')]?$_COOKIE[util::c('bru_cookie_name')]:$this-> ;url();
  189. }
  190. //否かは ajax请要求
  191. 保護された関数 isAjax()
  192. {
  193. if(isset( $_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
  194. return true;
  195. return false;
  196. }
  197. // json数组
  198. 保護関数を返す returnJson($data)
  199. {
  200. echo json_encode($data);
  201. exit();
  202. }
  203. //GET
  204. 保護関数_G($name)
  205. {
  206. return isset($_GET[$name])?util::sanitize($_GET[$name]):'';
  207. }
  208. //POST
  209. 保護された関数 _P($name)
  210. {
  211. if(!isset($_POST[$name]) || (is_string($_POST[$name]) && mb_strpos($_POST[$name],'请输入',0,'gbk') === 0)){
  212. return '';
  213. }else{
  214. return util ::sanitize($_POST[$name]);
  215. }
  216. }
  217. //REQUEST
  218. 保護関数 _R($name)
  219. {
  220. return isset($_REQUEST[$name])?util::sanitize($_REQUEST[ $name]):'';
  221. }
  222. }
复制幣


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート