vendor/appaydin/pd-api/Listener/ResponseTransformerListener.php line 31

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the pd-admin pd-api package.
  4.  *
  5.  * @package     pd-api
  6.  * @license     LICENSE
  7.  * @author      Ramazan APAYDIN <apaydin541@gmail.com>
  8.  * @link        https://github.com/appaydin/pd-api
  9.  */
  10. namespace Pd\ApiBundle\Listener;
  11. use Pd\ApiBundle\PdApiBundle;
  12. use Pd\ApiBundle\Services\AcceptContentType;
  13. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpKernel\Event\ViewEvent;
  17. use Symfony\Component\HttpKernel\KernelEvents;
  18. use Symfony\Component\Serializer\SerializerInterface;
  19. class ResponseTransformerListener implements EventSubscriberInterface
  20. {
  21.     public function __construct(private SerializerInterface $serializer,
  22.                                 private AcceptContentType $accept,
  23.                                 private ParameterBagInterface $bag)
  24.     {
  25.     }
  26.     public function onKernelView(ViewEvent $event): void
  27.     {
  28.         $request $event->getRequest();
  29.         if (!$request->attributes->get(PdApiBundle::ZONE_ATTRIBUTE)) {
  30.             return;
  31.         }
  32.         // Check Master Request || Response Object
  33.         if (!$event->isMainRequest() || ($result $event->getControllerResult()) instanceof Response) {
  34.             return;
  35.         }
  36.         // Create Response
  37.         $result $this->serializer->serialize($result$this->accept->getAcceptType(), ['groups' => $this->bag->get('pd_api.default_groups')]);
  38.         $response = (new Response())->setContent($result)->setStatusCode(200);
  39.         $response->headers->set('Content-Type''application/'.$this->accept->getAcceptType());
  40.         $event->setResponse($response);
  41.     }
  42.     public static function getSubscribedEvents(): array
  43.     {
  44.         return [KernelEvents::VIEW => [['onKernelView']]];
  45.     }
  46. }