Skip to content

Instantly share code, notes, and snippets.

@PopocaOrtiz
Forked from weierophinney/SoapController.php
Last active August 29, 2015 14:08
Show Gist options
  • Save PopocaOrtiz/6bd842b9c8769d40af44 to your computer and use it in GitHub Desktop.
Save PopocaOrtiz/6bd842b9c8769d40af44 to your computer and use it in GitHub Desktop.
<?php
return array(
'router' => array('routes' => array(
'soap' => array(
'type' => 'Literal',
'options' => array(
'route' => '/soap',
'defaults' => array(
'controller' => 'Soap\Controller\SoapController',
'action' => 'soap',
),
),
),
)),
'service_manager' => array(
'factories' => array(
'Soap\Controller\SoapController' => 'SomeFactoryYouWillNeedToWrite',
),
),
);
<?php
namespace Soap\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\Soap\AutoDiscover as SoapWsdlGenerator;
use Zend\Soap\Server as SoapServer;
class SoapController
{
protected $route;
protected $soap;
protected $wsdlGenarator
public function __construct($route, SoapServer $soapServer, SoapWsdlGenerator $wsdlGenerator)
{
$this->route = $route;
$this->soap = $soapServer;
$this->wsdlGenerator = $wsdlGenerator;
}
public function soapAction()
{
$request = $this->getRequest();
$response = $this->getResponse();
switch ($request->getMethod()) {
case 'GET':
$this->wsdlGenerator->setUri($this->url($this->route));
$wsdl = $this->wsdlGenerator->generate();
$response->getHeaders()->addHeaderLine('Content-Type', 'application/wsdl+xml');
$response->setContent($wsdl->toXml());
break;
case 'POST':
$this->soap->setReturnResponse(true);
$soapResponse = $this->soap->handle();
if ($soapResponse instanceof SoapFault) {
$soapResponse = (string) $soapResponse;
}
$response->getHeaders()->addHeaderLine('Content-Type', 'application/xml');
$response->setContent($soapResponse);
break;
default:
$response->setStatusCode(405);
$response->getHeaders()->addHeaderLine('Allow', 'GET,POST');
break;
}
return $response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment