Получить полученный XML с PHP SOAP Server

Я использую встроенный SOAP-сервер в приложении symfony2 и помимо обработки StdClass-Object, мне нужно будет прочитать полный xml, полученный для отладки и ведения журнала. Есть ли способ просто перехватить перенесенный xml? Он должен быть где-то в заголовке запроса, но я просто не могу его найти.

Я искал то же самое и, наконец, нашел его. Надеюсь, это поможет вам или кому-то еще.

 $postdata = file_get_contents("php://input"); 

В переменной $postdata будет использоваться необработанный XML. Найдено через следующие две ссылки:

http://php.net/manual/en/reserved.variables.httprawpostdata.php

http://php.net/manual/en/soapserver.soapserver.php

Необработанный 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