Что не так в моем коде? Как создать SOAP-сервис для моего класса Math?
Обратите внимание, что я не упоминал пространство имен для Math.php, потому что, если бы я сделал это, я получил class Math does not exist
сообщения в браузере. Без упоминания пространства имен класса Math, как создать объект Math в indexAction ().
Пожалуйста, представьте мне, как создать свой первый wsdl для класса Math.
Структура папок
модуль
–Мыло
—- контроллер
——> IndexController.php
—-Сервисы
——> Math.php
IndexController.php
include_once __DIR__ . '/../Services/Math.php' class IndexController extends AbstractActionController { private $_URI = "http://zf2.services/soap"; public function indexAction() { $server = new Server(null, array('uri' => $this->_URI)); $server->setClass('Math'); //$server->setObject(new Math()); $server->handle(); } }
Math.php
//namespace Soap\Services; class Math { /** * Method * @return string */ public function greeting() { return 'Hello world'; } }
Результат XML
<SOAP-ENV ..> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>sender</faultcode> <faultstring>Invalid XML</faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV>
Вы правы в отношении пространства имен, написанного в Math.php
.
Попробуйте это в IndexController.php –
include_once __DIR__ . '/../Services/Math.php'; class IndexController extends AbstractActionController { private $_URI = "http://zf2.services/soap"; public function indexAction() { $autodiscover = new \Zend\Soap\AutoDiscover(); $autodiscover->setClass('Math') ->setBindingStyle(array('style' => 'document')) ->setUri($this->_URI); header('Content-type: application/xml'); echo $autodiscover->toXml(); exit(); } }
Я пробовал, и все работает нормально.