>백엔드 개발 >PHP 튜토리얼 >컨트롤러 기본 클래스

컨트롤러 기본 클래스

WBOY
WBOY원래의
2016-07-25 08:47:571394검색
매우 간단하고 실용적인 컨트롤러 기본 클래스
  1. /**
  2. * @desc 컨트롤러 기본 클래스
  3. * @date 2013-05-06
  4. * @author liudesheng
  5. */
  6. defined('SYS_PATH') || die('액세스 불법');
  7. class Controller
  8. {
  9. //현재 컨트롤러
  10. protected $_controller;
  11. //현재 작업 메서드
  12. protected $_action;
  13. //권한 배열
  14. protected $_permissions;
  15. //템플릿 파일
  16. private $_layout = 'layout';
  17. //생성자 함수
  18. function __construct($controller,$action)
  19. {
  20. if('예외' != $controller){
  21. $this->_controller = $controller;
  22. $this->_action = $action;
  23. //로그인 확인 및 접근 권한 제어 부분, 로그인 The 페이지 확인이 필요하지 않습니다
  24. $trust_action = util::c('trust_action');
  25. if(!isset($trust_action[$this->_controller]) || !in_array($this-> _action ,$trust_action[$this->_controller])){
  26. $this->login();
  27. //$this->privilege();
  28. }
  29. $this - >init();
  30. }else{//예외 처리
  31. $this->Exception($action);
  32. }
  33. }
  34. //초기화 방법, 상속 작업에서 사용
  35. 보호 함수 init(){}
  36. //예외 처리 방법
  37. 개인 함수 예외($msg)
  38. {
  39. $this->showErr($ msg ,$layout);
  40. }
  41. //로그인 확인
  42. 비공개 함수 login()
  43. {
  44. if(!$this->isLogin()){
  45. if($this->isAjax()){
  46. header('HTTP/1.1 403 Forbidden');
  47. header("Error-Json:{code:'login'}"); 종료 ();
  48. }else{
  49. $this->redirect('index','login');
  50. }
  51. }
  52. }
  53. //판사 Login
  54. 보호된 최종 함수 isLogin()
  55. {
  56. $auth = isset($_COOKIE['auth'])?$_COOKIE['auth']:'';
  57. $isLogin = false인지 여부 ;
  58. if($auth){
  59. $info = Trim(file_get_contents('check.txt'));
  60. if(strcmp($auth,md5('steve'.$info.util:: c ('login_auth_suffix'))) == 0){
  61. $isLogin = true;
  62. }
  63. }
  64. return $isLogin;
  65. }
  66. //권한 확인
  67. 비공개 함수 권한()
  68. {
  69. $this->getPermissions();
  70. if(!$this->isAllow()){
  71. if($this-> isAjax ()){
  72. header('HTTP/1.1 403 Forbidden');
  73. header( "Error-Json:{code:'access'}")
  74. exit();
  75. } else {
  76. $this->showErr('죄송합니다. 이 권한이 없습니다.');
  77. }
  78. }
  79. }
  80. //권한 정보 가져오기
  81. 보호된 최종 함수 getPermissions()
  82. {
  83. $privilege = $this->admin['privilege'];
  84. $permissions_priv = util::c('permissions',$privilege);
  85. if(!isset($permissions_priv['city'])){
  86. $this->cityPriv = 'all'; //목록 쿼리를 단순화하기 위해 모든 도시 권한 선택 항목을 future
  87. }else{
  88. unset($permissions_priv['city']);
  89. }
  90. foreach($permissions['common'] as $ct => $ac){
  91. if(isset($permissions_priv[$ct] ) && 'all' == $permissions_priv[$ct])
  92. 계속;
  93. if('all' == $ac)
  94. $permissions_priv[$ct ] = 'all';
  95. else //이 상황은 배열이어야 하며 리소스를 절약하고 판단할 필요가 없습니다.
  96. $permissions_priv[$ct] = isset($permissions_priv[$ct])?array_merge($permissions_priv[$ ct],$ac):$ ac;
  97. }
  98. $this->_permissions = $permissions_priv;
  99. }
  100. //권한 유형에 따라 권한 유무 판단
  101. 보호된 최종 함수 isAllow($controller=' ',$action='')
  102. {
  103. if(!isset($this->_permissions))
  104. $this->getPermissions() ;
  105. $allow = false;
  106. $ct = $controller?$controller:$this->_controller;
  107. $ac = $action?$action:$this->_action;
  108. $permission_action = $this->_permissions[$ ct];
  109. if($permission_action && ('all' == $permission_action || in_array($ac,$permission_action) || 'any' == $action) )
  110. $allow = true;
  111. return $allow;
  112. }
  113. //오류 메시지 페이지
  114. protected function showErr($errMsg,$layout = null)
  115. {
  116. $this-> title = "오류 메시지";
  117. $this->errMsg = $errMsg;
  118. $this->render('error',$layout);
  119. }
  120. // 성공 정보 페이지
  121. protected function showSucc($msg,$skipUrl,$skipPage,$layout = null)
  122. {
  123. $this->title = " 성공 팁";
  124. $this-> ;msg = $msg;
  125. $this->skipUrl = $skipUrl;
  126. $this->skipPage = $skipPage;
  127. $this-> ;render('success',$layout);
  128. }
  129. //허가된 링크 표시
  130. 보호 함수 showPemissionLink($title,$ct,$ac,$param=array(),$ Wrap='')
  131. {
  132. if($wrap){
  133. $wrap_start = '<'.$wrap.'>';
  134. $wrap_end = '';
  135. }else{
  136. $wrap_start = $wrap_end = '';
  137. }
  138. if($this->isAllow($ct,$ac))
  139. echo $wrap_start,'',$title,'',$wrap_end;
  140. }
  141. //视图解析방법
  142. 보호 함수 render($template = null,$ 레이아웃 = null)
  143. {
  144. !is_null($layout) && $this->_layout = $layout;
  145. !$template && $template = $this->_controller.'_'.$ this->_action;
  146. ob_start();
  147. include(MODULE_PATH.'views/'.$this->_layout.'.tpl.php');
  148. $content = ob_get_clean();
  149. if($this->staticFile){
  150. file_put_contents($this->staticFile,$content);
  151. }
  152. echo $content;
  153. exit;
  154. }
  155. 보호된 함수 showHtml($html,$expire=3600,$path='')
  156. {
  157. 비어 있음($path) && $path=ROOT_PATH;
  158. $this->staticFile = sprintf('%s%s.html',$path,$html);
  159. $mkhtml = intval($this->_G('mkhtml'));
  160. if(!$mkhtml){
  161. if(file_exists($this->staticFile)){
  162. $fmtime = filemtime($this->staticFile);
  163. if(time()-$fmtime < $expire && date( 'Ymd') == 날짜('Ymd',$fmtime)){
  164. include $this->staticFile;
  165. 종료;
  166. }
  167. }
  168. }
  169. }
  170. //生成url
  171. 보호 함수 url($ct='',$ac='',$param = array(),$module='')
  172. {
  173. return $ GLOBALS['app']->url($ct,$ac,$param,$module);
  174. }
  175. //url跳转
  176. 보호 함수 리디렉션($ct=' ',$ac='',$param = array())
  177. {
  178. header('location:'.$this->url($ct,$ac,$param));
  179. exit();
  180. }
  181. //url跳转
  182. 보호 함수 리디렉션Url($url)
  183. {
  184. header('location:'.$url);
  185. exit();
  186. }
  187. //获取뒤로 리디렉션 URL
  188. 보호 함수 getBru()
  189. {
  190. return $_COOKIE[util::c('bru_cookie_name')]? $_COOKIE[util::c('bru_cookie_name')]:$this->url();
  191. }
  192. //是否是ajax请求
  193. 보호 함수 isAjax()
  194. {
  195. if(isset( $_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
  196. return true;
  197. return false;
  198. }
  199. //返回json数组
  200. 보호 함수 returnJson($data)
  201. {
  202. echo json_encode($data);
  203. exit();
  204. }
  205. // GET
  206. 보호 함수 _G($name)
  207. {
  208. return isset($_GET[$name])?util::sanitize($_GET[$name]):'';
  209. }
  210. //POST
  211. 보호 함수 _P($name)
  212. {
  213. if(!isset($_POST[$name]) || (is_string($_POST[$name]) && mb_strpos($_POST[$name],'请输入',0,'gbk') === 0)){
  214. return '';
  215. }else {
  216. return util::sanitize($_POST[$name]);
  217. }
  218. }
  219. //REQUEST
  220. 보호 함수 _R($name)
  221. {
  222. return isset($_REQUEST[$name])?util::sanitize($_REQUEST[$name]):'';
  223. }
  224. }
复主代码


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.