Eine einfache all-in-one Lösung für Standard SOAP Services kann man mit dem Kohana Framework und der Zend Bibliothek realisieren.
Dazu bedarf es lediglich eines Kohana Frontcontrollers über den wir den Service und die WSDL ansprechen können.
Zur automatischen Generierung der WSDL, bedienen wir uns hier der Zend AutoDiscover Klasse. Dieser Klasse übergibt man lediglich die ServiceModel-Klasse mit enthaltenen Annotationen, die die Servicefunktionen enthält.
Aus den Annotationen generiert Zend AutoDiscover eine passende WSDL.
/** * include libs and models * */ include('Zend/Soap/AutoDiscover.php'); include(APPPATH . 'models/service.php'); /** * this class represents a controller * application/controllers/soap.php * * @package SOAPService * @subpackage ... * @author saegefisch (xxx@xxx.xx) * @copyright (c) 2009 xxx */ class Soap_Controller extends Controller { /** * default constructor * * @param void * @return void */ public function __construct() { // load parent constructor parent::__construct(); } /** * service to call * * @param void * @return void */ public function service() { // disable wsdl cache ini_set('soap.wsdl_cache_enabled', '0'); // set auth settings if needed $settings = array( 'login' => 'user', 'password' => 'password', 'authentication' => SOAP_AUTHENTICATION_BASIC, 'soap_version' => SOAP_1_2, 'encoding' => 'UTF-8', 'cache_wsdl' => WSDL_CACHE_NONE ); // include user:password if needed $wsdl = 'http://user:password@' . $_SERVER['HTTP_HOST'] . '/soap/wsdl'; $server = new SoapServer($wsdl, $settings); $server->setClass('Service_Model'); $server->handle(); } /** * wsdl to call * * @param void * @return void */ public function wsdl() { // disable wsdl cache ini_set('soap.wsdl_cache_enabled', '0'); $wsdl = new Zend_Soap_AutoDiscover(); $wsdl->setUri('http://' . $_SERVER['HTTP_HOST'] . '/soap/service'); $wsdl->setClass('Service_Model'); $wsdl->handle(); } }
Hier stellen wir das Standard Model für unseren SOAP Service zusammen.
/** * this class represents a model * application/models/service.php * * @package SOAPService * @subpackage ... * @author saegefisch (xxx@xxx.xx) * @copyright (c) 2009 */ class Service_Model extends Model { /** * default constructor * * @param void * @return void */ public function __construct() { // load database library into $this->db (can be omitted if not required) parent::__construct(); } /** * dummy function * * @param int $int * @param string $string * @param array $arr * @param object $obj * @param bool $bool * @return array */ public function get_dummy_array($int, $string, $arr, $obj, $bool) { return array(); } /** * dummy function * * @param int $int * @param string $string * @param array $arr * @param object $obj * @param bool $bool * @return bool */ public function get_dummy_boolean($int, $string, $arr, $obj, $bool) { return true; } /** * dummy function * * @param int $int * @param string $string * @param array $arr * @param object $obj * @param bool $bool * @return string */ public function get_dummy_string($int, $string, $arr, $obj, $bool) { return 'foo=bar'; } }