2014-10-02 */ class PhalApi_ApiFactory { /** * 创建服务器 * 根据客户端提供的接口服务名称和需要调用的方法进行创建工作,如果创建失败,则抛出相应的自定义异常 * * 创建过程主要如下: * - 1、 是否缺少控制器名称和需要调用的方法 * - 2、 控制器文件是否存在,并且控制器是否存在 * - 3、 方法是否可调用 * - 4、 控制器是否初始化成功 * * @param boolen $isInitialize 是否在创建后进行初始化 * @param string $_REQUEST['service'] 接口服务名称,格式:XXX.XXX * @return PhalApi_Api 自定义的控制器 * * @uses PhalApi_Api::init() * @throws PhalApi_Exception_BadRequest 非法请求下返回400 */ static function generateService($isInitialize = TRUE) { $service = DI()->request->getService(); $api = DI()->request->getServiceApi(); $action = DI()->request->getServiceAction(); if (empty($api) || empty($action)) { throw new PhalApi_Exception_BadRequest( T('service ({service}) illegal', array('service' => $service)) ); } $apiClass = 'Api_' . ucfirst($api); if (!class_exists($apiClass)) { throw new PhalApi_Exception_BadRequest( T('no such service as {service}', array('service' => $service)), 4 ); } $api = new $apiClass(); if (!is_subclass_of($api, 'PhalApi_Api')) { throw new PhalApi_Exception_InternalServerError( T('{class} should be subclass of PhalApi_Api', array('class' => $apiClass)) ); } if (!method_exists($api, $action) || !is_callable(array($api, $action))) { throw new PhalApi_Exception_BadRequest( T('no such service as {service}', array('service' => $service)), 4 ); } if ($isInitialize) { $api->init(); } return $api; } }