我在项目中定义了一个Api的module,用于接口的调用模块。
api模块中存放格式和ZF2的标准结构一样。我在controller中编写了如下代码:
class IndexController extends AbstractActionController { private $_WSDL_URI = "http://m158/ff-zf2/public/api?wsdl"; private function handleSOAP() { $soap = new \Zend\Soap\Server($this->_WSDL_URI); $soap->setClass('Api\Api'); $soap->handle(); exit; } private function handleWSDL() { $autodiscover = new \Zend\Soap\AutoDiscover(); $autodiscover->setClass('Api\Api') ->setUri( $this->_WSDL_URI ); $autodiscover->generate(); $autodiscover->handle(); exit; } public function indexAction() { $view = new ViewModel(); $view->setTerminal(true); ini_set("soap.wsdl_cache_enabled","0"); if (isset($_GET['wsdl'])) { $this->handleWSDL(); } else { $this->handleSOAP(); } } public function clientAction() { $options = array('location' => 'http://m158/ff-zf2/public/api', 'uri' => 'http://m158/ff-zf2/public/api?wsdl'); $client = new \Zend\Soap\Client(null, $options); $result = $client->api('user.login', array("email"=>"shimanjun@126.com", "password"=>"dfjofosdfe")); } }
在和controller同级目录下创建了一个名为Api的类,该类主要是做api调用的主类。代码如下:
class Api { /** * * 登录帐号密码是否正确 * @param string $operation * @param Array $statement * @return string */ public function api($operation, $statement){ $apiInfo = explode('.', $operation); $className = '\\Api\\Model\\'.ucwords($apiInfo[0]); $method = $apiInfo[1]; extract($statement); switch ($apiInfo[0]) { case 'user': $result = $user->$method($email, $password); return $result; break; case ''; break; default: break; } } }
现在我遇到的问题是在调用User类中的方法时,因没有办法得到adapter对象,而无法执行查询操作。请高手们帮忙看下这个问题该怎么解决。
我试过的解决方法:
测试操作是调用index的clientAction即可