Автообнаружение мыла Zend и nillable = "true" в сгенерированном WSDL

Я использую автообнаружение мыла Zend для создания WSDL-файла для моего веб-сервера. Проблема в том, что каждый элемент каждого complexType по умолчанию имеет nillable="true" . Как я объявляю элементы по мере необходимости? Я читал PHPDoc, но ничего не нашел.

EDIT: Код:

 class MyService { /** * Identify remote user. * * @param LoginReq * @return LoginResp */ public function login($request) { // Code .... } } class LoginReq { /** @var string */ public $username; /** @var string */ public $password; } class LoginResp { /** @var string */ public $errorCode; } 

Сгенерированный WSDL:

  <xsd:complexType name="LoginReq"> <xsd:all> <xsd:element name="username" type="xsd:string" nillable="true"/> <xsd:element name="password" type="xsd:string" nillable="true"/> </xsd:all> </xsd:complexType> <xsd:complexType name="LoginResp"> <xsd:all> <xsd:element name="errorCode" type="xsd:string" nillable="true"/> </xsd:all> </xsd:complexType> 

EDIT2: Я просто обнаружил, что для объявления элемента по мере необходимости / необязательно вам нужно использовать minOccurs/maxOcurrs . Оба по умолчанию равны 1, поэтому по умолчанию каждый элемент требуется. Чтобы объявить необязательный элемент, вы объявляете его с помощью minOccurs="1" . Nillable предназначен только для того, чтобы позволить элементам быть пустым. Опять же, как я объявляю элемент как необязательный (поэтому Zend добавляет minOccurs = "0" к этому элементу)?

если у вас есть значение по умолчанию, заданное в определении вашей функции, оно будет nillable.

 public function myMethod($argument = 'hello') { // $argument is nillable } 

Если это не так, можете ли вы разместить свой код с блоками doc?

РЕДАКТИРОВАТЬ: Ваш пример кода проясняет многое.

Если вы посмотрите на Zend / Soap / Wsdl / Strategy / DefaultComplesType.php вокруг строки 76, вы увидите следующее:

  // If the default value is null, then this property is nillable. if ($defaultProperties[$propertyName] === null) { $element->setAttribute('nillable', 'true'); } 

Это код, который определяет, является ли ваш атрибут «сложного типа» незаменимым. Я бы попробовал обновить свой код, чтобы включить значение по умолчанию для строк. Что-то вроде:

 class LoginReq { /** @var string */ public $username = ''; /** @var string */ public $password = ''; } 

Если вы это сделаете, значение === null должно быть равно false. Однако убедитесь, что ваш код правильно обрабатывает данные.

Если это не сработает, дайте мне знать!