PHP SOAP: verschil tussen versies

Uit Rolandow
Ga naar: navigatie, zoeken
(Nieuwe pagina aangemaakt met '= SOAP server = Een soap server maken is het makkelijkst door gebruik te maken van Zend objecten. Als je objecten als parameters gebruikt in je methods, in de server,…')
(geen verschil)

Versie van 3 sep 2010 om 09:29

SOAP server

Een soap server maken is het makkelijkst door gebruik te maken van Zend objecten. Als je objecten als parameters gebruikt in je methods, in de server, dan krijg je ze altijd binnen als stdClass object. Volgens mij kan dit niet anders, en misschien zou dit ook gek zijn, anders kunnen mensen allerlei objecten in je server duwen. Aan de client kun je wel gebruik maken van object mapping. Je weet aan de hand van de wdsl wat er terug gegeven wordt door de server, dus dit kun je mappen aan je eigen objecten.

Om je soap server te laten afhandelen door een object kun je dit stukje standaard code gebruiken, wat gebruik maakt van Zend.

ini_set('soap.wsdl_cache_enabled', '0');

include_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $loader->suppressNotFoundWarnings(false);

require_once "Zend/Soap/Server.php"; require_once "Zend/Soap/AutoDiscover.php";

if(isset($_GET['wsdl'])) {

  $autodiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex');
  $autodiscover->setClass('TestService');
  $autodiscover->handle();

} else {

  $soap = new Zend_Soap_Server("http://soapserver.local/tstSoapServer.php?wsdl"); // this current file here
  $soap->setClass('TestService');
  $soap->handle();

}

Hieronder kun je dan je class definieren, of dit includeren.

Client

Een client is dan ook heel simpel aan te maken. Voorbeeldje met class mapping. Als je de class Group hebt gedefinieerd voor het laden van de SOAP Client dan zal de var $group dus van het type Group zijn. Client side kun je e.e.a. dus wel meteen aan je models hangen.

$client = new SoapClient("http://soapserver.local/tstSoapServer.php?wsdl", array("classmap" => array("Person" => "Person", "Group" => "Group"))); $group = $client->getGroup();