README
======
Le webservice est basé sur le ZendFramework pour générer les WSDLs.
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)) {
//Suppression tabulation et autres
$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 = 'http://scoresws.sd.dev';
$urlFichier = '/ref/fichier/';
$urlMysql = '/ref/table/';
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);
}
Fonctionnement
==============
Obtenir le WSDL
- En mode développement : http://hostname/service?wsdl-auto
- Générer le wsdl : http://hostname/service?wsdl-generate
- Utiliser le WSDL généré : http://hostname/service?wsdl
Pour définir le mode (vhost d'apache)
SetEnv APPLICATION_ENV "development"
SetEnv APPLICATION_ENV "production"
SetEnv APPLICATION_ENV "staging"
En appelant l'url http://hostname/service, le contoller de l'application,
"service" est automatiquement utiliser.
Tout ce qui est visible dans la class est utilisé par le controller et se
retrouve visible dans le service (wsdl, requête)
Si des fonctions ne doivent pas être rendu visible il faut donc les séparer
dans un autre controller utilisant une autre class.
Configuration VHOST
===================
Exemple de vhost en mode développement
<VirtualHost *:80>
ServerName scoresws.sd.dev
AddDefaultCharset utf-8
DocumentRoot "D:/www/scoresws/public"
SetEnv APPLICATION_ENV "development"
<Directory "D:/www/scoresws/public/">
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel debug
ErrorLog "logs/scoresws.sd.dev-error.log"
CustomLog "logs/scoresws.sd.dev-access.log" common
</VirtualHost>