Controller.class.php 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: liu21st <liu21st@gmail.com>
  10. // +----------------------------------------------------------------------
  11. namespace Think;
  12. /**
  13. * ThinkPHP API模式控制器基类
  14. */
  15. abstract class Controller {
  16. /**
  17. * 架构函数
  18. * @access public
  19. */
  20. public function __construct() {
  21. //控制器初始化
  22. if(method_exists($this,'_initialize'))
  23. $this->_initialize();
  24. }
  25. /**
  26. * 魔术方法 有不存在的操作的时候执行
  27. * @access public
  28. * @param string $method 方法名
  29. * @param array $args 参数
  30. * @return mixed
  31. */
  32. public function __call($method,$args) {
  33. if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX'))) {
  34. if(method_exists($this,'_empty')) {
  35. // 如果定义了_empty操作 则调用
  36. $this->_empty($method,$args);
  37. }else{
  38. E(L('_ERROR_ACTION_').':'.ACTION_NAME);
  39. }
  40. }else{
  41. E(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));
  42. return;
  43. }
  44. }
  45. /**
  46. * Ajax方式返回数据到客户端
  47. * @access protected
  48. * @param mixed $data 要返回的数据
  49. * @param String $type AJAX返回数据格式
  50. * @return void
  51. */
  52. protected function ajaxReturn($data,$type='') {
  53. if(empty($type)) $type = C('DEFAULT_AJAX_RETURN');
  54. switch (strtoupper($type)){
  55. case 'JSON' :
  56. // 返回JSON数据格式到客户端 包含状态信息
  57. header('Content-Type:application/json; charset=utf-8');
  58. exit(json_encode($data));
  59. case 'XML' :
  60. // 返回xml格式数据
  61. header('Content-Type:text/xml; charset=utf-8');
  62. exit(xml_encode($data));
  63. case 'JSONP':
  64. // 返回JSON数据格式到客户端 包含状态信息
  65. header('Content-Type:application/json; charset=utf-8');
  66. $handler = isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
  67. exit($handler.'('.json_encode($data).');');
  68. case 'EVAL' :
  69. // 返回可执行的js脚本
  70. header('Content-Type:text/html; charset=utf-8');
  71. exit($data);
  72. }
  73. }
  74. /**
  75. * Action跳转(URL重定向) 支持指定模块和延时跳转
  76. * @access protected
  77. * @param string $url 跳转的URL表达式
  78. * @param array $params 其它URL参数
  79. * @param integer $delay 延时跳转的时间 单位为秒
  80. * @param string $msg 跳转提示信息
  81. * @return void
  82. */
  83. protected function redirect($url,$params=array(),$delay=0,$msg='') {
  84. $url = U($url,$params);
  85. redirect($url,$delay,$msg);
  86. }
  87. }