使用示例:
```
* $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 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;
}
}