Получите полученный XML с PHP SOAP Server - PullRequest
8 голосов
/ 01 августа 2011

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

Ответы [ 2 ]

19 голосов
/ 21 октября 2011

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

$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

2 голосов
/ 15 августа 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...