El cuerpo del Fosrestbundle está vacío cuando se solicitan varias partes

En el siguiente código espero que el$request->getContents() para obtener el contenido corporal de laHTTP solicitud. Al enviar una solicitud que no sea de varias partes, esto funciona como se esperaba, aunque cuando se usan solicitudes de varias partes, la$body La variable permanece vacía.

public function postDebugAction(Request $request) {
    $body = $request->getContent();

    if (empty($body)) {
        throw new \Exception('Body empty.');
    }


    return $this->view(array(), 201);
}

Despues de leeresta pregunta y respuesta también agregué un oyente corporal.

<?php

namespace VSmart\ApiBundle\Listener;

use FOS\RestBundle\EventListener\BodyListener as BaseBodyListener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use FOS\RestBundle\Decoder\DecoderProviderInterface;

class BodyListener extends BaseBodyListener {

    /**
     * @var DecoderProviderInterface
     */
    private $decoderProvider;

 ,   /**
     * @param DecoderProviderInterface $decoderProvider Provider for fetching decoders
     */
    public function __construct(DecoderProviderInterface $decoderProvider) {
        $this->decoderProvider = $decoderProvider;
    }

    /**
     * {@inheritdoc}
     */
    public function onKernelRequest(GetResponseEvent $event) {
        $request = $event->getRequest();

        if (strpos($request->headers->get('Content-Type'), 'multipart/form-data') !== 0) {
            return;
        }

        $format = 'json';

        if (!$this->decoderProvider->supports($format)) {
            return;
        }

        $decoder = $this->decoderProvider->getDecoder($format);
        $iterator = $request->request->getIterator();
        $request->request->set($iterator->key(), $decoder->decode($iterator->current(), $format));
    }

}

De acuerdo con mi prueba PHPUnit, esto funcionaba cuando se usabaPostman yAdvanced Rest Client Para simular la solicitud, el cuerpo parece estar vacío nuevamente. Verifiqué esto para ejecutar tanto las solicitudes de simulación como PHPUnit con el depurador. El resultado es que, de hecho, el cuerpo está vacío cuando se simula a través de un cliente Rest y no está vacío cuando se ejecuta a través de PHPUnit.

El caso de prueba que utilicé:

POST URL:

http://localhost/EntisServer/web/app_dev.php/api2/debug

Encabezados:

Authorization: Bearer ZGYzYjY1YzY4MGY3YWM3OTFhYTI4Njk3ZmI0NmNmOWZmMjg5MDFkYzJmOWZkOWE4ZTkyYTRmMGM4NTE1MWM0Nw
Content-Type: multipart/form-data; boundary=-----XXXXX

Contenido:

-----XXXXX
Content-Disposition: form-data; name="json"
Content-Type: application/json; charset=utf-8

{
    "blabla": 11
}

-----XXXXX
Content-Disposition: form-data; name="q_3101"; filename="image.jpg"
Content-Type: image/jpeg

contents of a file...

-----XXXXX--

ACTUALIZAR No estaba seguro de si atravesé el depurador sin usar elBodyListener. Cuando hice el resultado es exactamente el mismo. Entonces, sin elBodyListener el caso PHPUnit obtiene el cuerpo aunque la solicitud simulada todavía está vacía.

Respuestas a la pregunta(2)

Su respuesta a la pregunta