| <?php | 
| /** | 
|  * 框架版本号 | 
|  */ | 
| defined('PHALAPI_VERSION') || define('PHALAPI_VERSION', '1.4.1'); | 
|   | 
| /** | 
|  * 项目根目录 | 
|  */ | 
| defined('PHALAPI_ROOT') || define('PHALAPI_ROOT', dirname(__FILE__)); | 
|   | 
| require_once PHALAPI_ROOT . DIRECTORY_SEPARATOR . 'PhalApi' . DIRECTORY_SEPARATOR . 'Loader.php'; | 
|   | 
| /** | 
|  * PhalApi 应用类 | 
|  * | 
|  * - 实现远程服务的响应、调用等操作 | 
|  *  | 
|  * <br>使用示例:<br> | 
| ``` | 
|  * $api = new PhalApi(); | 
|  * $rs = $api->response(); | 
|  * $rs->output(); | 
| ``` | 
|  * | 
|  * @package     PhalApi\Response | 
|  * @license     http://www.phalapi.net/license GPL 协议 | 
|  * @link        http://www.phalapi.net/ | 
|  * @author      dogstar <chanzonghuang@gmail.com> 2014-12-17 | 
|  */ | 
|   | 
| class PhalApi { | 
|      | 
|     /** | 
|      * 响应操作 | 
|      * | 
|      * 通过工厂方法创建合适的控制器,然后调用指定的方法,最后返回格式化的数据。 | 
|      * | 
|      * @return mixed 根据配置的或者手动设置的返回格式,将结果返回 | 
|      *  其结果包含以下元素: | 
| ``` | 
|      *  array( | 
|      *      'ret'   => 200,                //服务器响应状态 | 
|      *      'data'  => array(),            //正常并成功响应后,返回给客户端的数据     | 
|      *      'msg'   => '',                //错误提示信息 | 
|      *  ); | 
| ``` | 
|      */ | 
|     public function response() { | 
|         $rs = DI()->response; | 
|         try { | 
|             // 接口调度与响应 | 
|             $api    = PhalApi_ApiFactory::generateService();  | 
|             $action = DI()->request->getServiceAction(); | 
|             $data   = call_user_func(array($api, $action)); | 
|   | 
|             $rs->setData($data); | 
|         } catch (PhalApi_Exception $ex) { | 
|             // 框架或项目可控的异常 | 
|             $rs->setRet($ex->getCode()); | 
|             $rs->setMsg($ex->getMessage()); | 
|         } catch (Exception $ex) { | 
|             // 不可控的异常 | 
|             DI()->logger->error(DI()->request->getService(), strval($ex)); | 
|   | 
|             if (DI()->debug) { | 
|                 $rs->setRet($ex->getCode()); | 
|                 $rs->setMsg($ex->getMessage()); | 
|                 $rs->setDebug('exception', $ex->getTrace()); | 
|             } else { | 
|                 throw $ex; | 
|             } | 
|         } | 
|   | 
|         $rs->setDebug('stack', DI()->tracer->getStack()); | 
|         $rs->setDebug('sqls', DI()->tracer->getSqls()); | 
|   | 
|         return $rs; | 
|     } | 
|      | 
| } |