You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

75 lines
2.0 KiB

  1. <?php
  2. /**
  3. * 框架版本号
  4. */
  5. defined('PHALAPI_VERSION') || define('PHALAPI_VERSION', '1.3.6');
  6. /**
  7. * 项目根目录
  8. */
  9. defined('PHALAPI_ROOT') || define('PHALAPI_ROOT', dirname(__FILE__));
  10. require_once PHALAPI_ROOT . DIRECTORY_SEPARATOR . 'PhalApi' . DIRECTORY_SEPARATOR . 'Loader.php';
  11. /**
  12. * PhalApi 应用类
  13. *
  14. * - 实现远程服务的响应、调用等操作
  15. *
  16. * <br>使用示例:<br>
  17. * ```
  18. * $api = new PhalApi();
  19. * $rs = $api->response();
  20. * $rs->output();
  21. * ```
  22. *
  23. * @package PhalApi\Response
  24. * @license http://www.phalapi.net/license GPL 协议
  25. * @link http://www.phalapi.net/
  26. * @author dogstar <chanzonghuang@gmail.com> 2014-12-17
  27. */
  28. class PhalApi
  29. {
  30. /**
  31. * 响应操作
  32. *
  33. * 通过工厂方法创建合适的控制器,然后调用指定的方法,最后返回格式化的数据。
  34. *
  35. * @return mixed 根据配置的或者手动设置的返回格式,将结果返回
  36. * 其结果包含以下元素:
  37. * ```
  38. * array(
  39. * 'ret' => 200, //服务器响应状态
  40. * 'data' => array(), //正常并成功响应后,返回给客户端的数据
  41. * 'msg' => '', //错误提示信息
  42. * );
  43. * ```
  44. */
  45. public function response()
  46. {
  47. $rs = DI()->response;
  48. $service = DI()->request->get('service', 'Default.Index');
  49. try {
  50. // 接口响应
  51. $api = PhalApi_ApiFactory::generateService();
  52. list($apiClassName, $action) = explode('.', $service);
  53. $data = call_user_func(array($api, $action));
  54. $rs->setData($data);
  55. } catch (PhalApi_Exception $ex) {
  56. // 框架或项目的异常
  57. $rs->setRet($ex->getCode());
  58. $rs->setMsg($ex->getMessage());
  59. } catch (Exception $ex) {
  60. // 不可控的异常
  61. DI()->logger->error($service, strval($ex));
  62. throw $ex;
  63. }
  64. return $rs;
  65. }
  66. }