Le fichier Zend/Soap/Wsdl/Strategy/DefaultComplexType.php a été modifié pour générer la documentation automatiquement. /** * Traitement éléments de documentation à placer dans le WSDL * Supprime les retours chariots. * Récupére les éléments de documentation */ $comment = ''; $docBlock = preg_replace('/\n/', '', $property->getDocComment() ); if (preg_match('/\/\*\*(.+) \* @var\s+[^\s]+/m', $docBlock, $docBlockMatches)) { $comment.= preg_replace( array('/\r/', '/\t\s\*/', '/@ref\s+[^\s]+/'), array('', '', ''), $docBlockMatches[1] ); } if (preg_match('/@var\s+[^\s]+\s+(.+)\*\//m', $docBlock, $docBlockMatches)) { $comment.= preg_replace( array('/\r/', '/\t\s\*/', '/@ref\s+[^\s]+/'), array('', '', ''), $docBlockMatches[1] ); } /** * Traitement des références * @ref fichier:titre:nom_du_fichier * => http://vhost/ref/fichier/ * @ref mysql:titre:db.table(col1,col2,....) * => http://vhost/ref/table/ */ if (preg_match_all('/@ref\s+(fichier|mysql):([^\s]+):([^\s]+)/m', $property->getDocComment(), $refMatches, PREG_SET_ORDER)){ $host = $_SERVER['SERVER_NAME']; $urlFichier = '/ref/fichier/'; $urlMysql = '/ref/table/'; $comment.= 'Référence(s) : '; foreach ($refMatches as $ref){ switch ($ref[0]){ case 'fichier': $comment.= $ref[1].'('.$host.$urlFichier.'?q='.$ref[2].')'; break; case 'mysql': $comment.= $ref[1].'('.$host.$urlMysql.'?q='.base64_encode($ref[2]).')'; break; } $comment.= ', '; } } /** * Ajout des éléments de documentation au WSDL */ if (!empty($comment)){ $annotation = $dom->createElement('xsd:annotation'); $documentation = $dom->createElement('xsd:documentation', trim($comment)); $annotation->appendChild($documentation); $element->appendChild($annotation); } ===============================================================================> Le fichier Zend/Soap/AutoDiscover.php a été modifié function _addFunctionToWsdl $sequenceElement = array( 'name' => $param->getName(), 'type' => $wsdl->getType($param->getType()), 'desc' => $param->getDescription() ); ===============================================================================> Le fichier Zend/Soap/Wsdl.php a été modifié function _parseElement } elseif ($key == 'desc') { if (!empty($value)) { $annotation = $this->_dom->createElement('xsd:annotation'); $documentation = $this->_dom->createElement('xsd:documentation', trim($value)); $annotation->appendChild($documentation); $elementXml->appendChild($annotation); } } else { ===============================================================================> Modifier la function _reflect du fichier Zend/Server/Reflection/Function/Abstract.php // Get param types and description if (preg_match_all('/@param\s+([^\s]+)/m', $docBlock, $matches)) { $paramTypesTmp = $matches[1]; if (preg_match_all('/@param\s+\S+\s+(\$\S+)\s+(.*?)(\*|\*\/)/s', $docBlock, $matches)) { $paramDesc = $matches[2]; foreach ($paramDesc as $key => $value) { $value = preg_replace('/\s?\*\s/m', '', $value); $value = preg_replace('/\s{2,}/', ' ', $value); $paramDesc[$key] = trim($value); } } }