Tôi đang chuẩn bị máy chủ SOAP và WSDL tạo của tôi sử dụng mã sau:Zend Framework 2 SOAP AutoDiscover và phức tạp loại
//(... Controller action code ...)
if (key_exists('wsdl', $params)) {
$autodiscover = new AutoDiscover();
$autodiscover->setClass('WebServiceClass')
->setUri('http://server/webserver/uri');
$autodiscover->handle();
} else {
$server = new Server(null);
$server->setUri($ws_url);
$server->setObject($this->getServiceLocator()->get('MyController\Service\WebServiceClass'));
$server->handle();
}
//(... Controller action code ...)
Nhưng trong một trong những phương pháp WebService của tôi, tôi có một tham số kiểu mảng trong đó mỗi phần tử là loại "MyOtherClass", như sau:
/**
* Add list of MyOtherClass items
*
* @param MyOtherClass[] $items
*
* @return bool
*/
function add($items) {
// Function code here
}
Khi tôi cố gắng tạo ra WSDL tôi nhận được lỗi sau:
PHP Warning: DOMDocument::loadXML(): Empty string supplied as input in /<zend framweork path>/Server/vendor/zendframework/zendframework/library/Zend/Soap/Server.php on line 734
Hoặc ngoại lệ này:
Cannot add a complex type MyOtherClass[] that is not an object or where class could not be found in "DefaultComplexType" strategy.
Khi tôi thêm vào một cái gì đó mã của tôi như thế này:
//(...)
if (key_exists('wsdl', $params)) {
$autodiscover = new AutoDiscover();
$autodiscover->setClass('WebServiceClass');
$autodiscover->setUri($ws_url);
$complex_type_strategy = new \Zend\Soap\Wsdl\ComplexTypeStrategy\ArrayOfTypeComplex();
$complex_type_strategy->addComplexType('MyOtherClass');
$autodiscover->setComplexTypeStrategy($complex_type_strategy);
$autodiscover->handle();
} else {
//(...)
Tôi nhận được thông báo lỗi sau:
Fatal error: Call to a member function getTypes() on a non-object in /<project dir>/vendor/zendframework/zendframework/library/Zend/Soap/Wsdl/ComplexTypeStrategy/AbstractComplexTypeStrategy.php on line 54
Trong sơ yếu lý lịch, câu hỏi là : làm thế nào tôi có thể biết WSDL của Loại tùy chỉnh mới được sử dụng làm tham số?
Cảm ơn
'MyOtherClass []' có vẻ sai với tôi trong ngữ cảnh php. Tôi muốn thử tạo đối tượng MyOtherClassCollection chứa các phần tử. – DanielKhan
'MyOtherClass []' định nghĩa một mảng các đối tượng MyOtherClass. Điều này là hoàn toàn tốt trong PHP cho các chế độ Zend \ Soap \ AutoDiscover 'ArrayOfTypeSequence' và' ArrayOfTypeComplex'. –