Необработанный XML, передаваемый в конверте SOAP, должен находиться в теле POST.В приложении Symfony вы можете получить тело запроса POST, создав объект Request и вызвав его метод getContents () .
Внутри контроллера
Вы можете легко получить содержимое запроса в контроллере, например:
// src/MyProject/MyBundle/Controller/MyController.php
use Symfony\Component\HttpFoundation\Request;
...
$request = Request::createFromGlobals();
$soapEnvelope = $request->getContents();
Внутри службы
Лучшая практика (для Symfony 2.4+) - ввести RequestStack в вашкласс обслуживания в контейнере услуг.Вы можете сделать это в качестве аргумента конструктора для вашего класса обслуживания, вызвав метод setter и т. Д. Вот быстрый пример использования внедрения через конструктор.
В вашем контейнере службы:
// src/MyProject/MyBundle/Resources/config/services.xml
<service id="my.service" class="MyServiceClass">
<argument type="service" id="request_stack" />
</service>
Тогда в вашем классе обслуживания:
// src/MyProject/MyBundle/Service/MyService.php
use Symfony\Component\HttpFoundation\RequestStack;
....
class MyServiceClass
{
/**
* @var RequestStack $rs
*/
private $requestStack;
/**
* Constructor
*
* @param RequestStack $requestStack
*/
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
/**
* Some method where you need to access the raw SOAP xml
*/
public function myMethod()
{
$request = $this->requestStack->getCurrentRequest();
$soapEnvelope = $request->getContents();
}
}
Справочная документация:
http://symfony.com/blog/new-in-symfony-2-4-the-request-stack