ApiPlatform\Core\EventListener\RespondListener::onKernelView PHP Method

onKernelView() public method

Creates a Response to send to the client according to the requested format.
public onKernelView ( GetResponseForControllerResultEvent $event )
$event Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent
    public function onKernelView(GetResponseForControllerResultEvent $event)
    {
        $controllerResult = $event->getControllerResult();
        $request = $event->getRequest();
        if ($controllerResult instanceof Response || !$request->attributes->get('_api_respond')) {
            return;
        }
        $event->setResponse(new Response($controllerResult, self::METHOD_TO_CODE[$request->getMethod()] ?? Response::HTTP_OK, ['Content-Type' => sprintf('%s; charset=utf-8', $request->getMimeType($request->getRequestFormat())), 'Vary' => 'Accept', 'X-Content-Type-Options' => 'nosniff', 'X-Frame-Options' => 'deny']));
    }

Usage Example

 public function testCreate204Response()
 {
     $kernelProphecy = $this->prophesize(HttpKernelInterface::class);
     $request = new Request([], [], ['_api_respond' => true]);
     $request->setRequestFormat('xml');
     $request->setMethod(Request::METHOD_DELETE);
     $event = new GetResponseForControllerResultEvent($kernelProphecy->reveal(), $request, HttpKernelInterface::MASTER_REQUEST, 'foo');
     $listener = new RespondListener();
     $listener->onKernelView($event);
     $response = $event->getResponse();
     $this->assertEquals('foo', $response->getContent());
     $this->assertEquals(Response::HTTP_NO_CONTENT, $response->getStatusCode());
     $this->assertEquals('text/xml; charset=utf-8', $response->headers->get('Content-Type'));
     $this->assertEquals('Accept', $response->headers->get('Vary'));
     $this->assertEquals('nosniff', $response->headers->get('X-Content-Type-Options'));
     $this->assertEquals('deny', $response->headers->get('X-Frame-Options'));
 }
RespondListener