src/Core/Response/Json/ResponseBuilder.php line 93

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Core\Response\Json;
  3. use Harmonizely\Core\Exception\Contract\IBaseException;
  4. use Harmonizely\Core\Response\Contract\IResponseBuilder;
  5. use Harmonizely\Core\Serializer\Contract\ISerializer;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Twig\Environment;
  9. use Twig\Error\LoaderError;
  10. use Twig\Error\RuntimeError;
  11. use Twig\Error\SyntaxError;
  12. /**
  13.  * Class ResponseBuilder
  14.  *
  15.  * @package Harmonizely\Core\Response\Json
  16.  */
  17. class ResponseBuilder implements IResponseBuilder
  18. {
  19.     /**
  20.      * @var ISerializer
  21.      */
  22.     private ISerializer $serializer;
  23.     /**
  24.      * @var RequestStack
  25.      */
  26.     private RequestStack $requestStack;
  27.     /**
  28.      * @var Environment
  29.      */
  30.     private Environment $twig;
  31.     /**
  32.      * ResponseBuilder constructor.
  33.      *
  34.      * @param ISerializer $serializer
  35.      * @param RequestStack $requestStack
  36.      * @param Environment $twig
  37.      */
  38.     public function __construct(ISerializer $serializerRequestStack $requestStackEnvironment $twig)
  39.     {
  40.         $this->serializer $serializer;
  41.         $this->requestStack $requestStack;
  42.         $this->twig $twig;
  43.     }
  44.     /**
  45.      * Build serializer response data
  46.      *
  47.      * @param $data
  48.      * @param array $groups
  49.      * @param callable|null $circularReferenceHandler
  50.      * @return Response
  51.      */
  52.     public function buildResponse($data, array $groups = [], ?callable $circularReferenceHandler null): Response
  53.     {
  54.         return new SerializedResponse($this->serializer->serialize($data$groups$circularReferenceHandler));
  55.     }
  56.     /**
  57.      * Build empty response
  58.      *
  59.      * @return Response
  60.      */
  61.     public function buildEmptyResponse(): Response
  62.     {
  63.         return new EmptyResponse();
  64.     }
  65.     /**
  66.      * Build exception response
  67.      *
  68.      * @param IBaseException $exception
  69.      * @return Response
  70.      * @throws LoaderError
  71.      * @throws RuntimeError
  72.      * @throws SyntaxError
  73.      */
  74.     public function buildExceptionResponse(IBaseException $exception): Response
  75.     {
  76.         $request $this->requestStack->getCurrentRequest();
  77.         if ($request && $request->getPreferredFormat() === 'html' && strpos($request->getContentType(), 'json') === false && !$request->headers->has('X-AUTH-TOKEN') && !$request->headers->has('X-API-KEY')) {
  78.             return new Response(
  79.                 $this->twig->render('common/error.html.twig', [
  80.                     'error' => $exception->getMessage(),
  81.                     'data' => $exception->getData(),
  82.                     'code' => $exception->getCode(),
  83.                     'exception' => $exception,
  84.                 ]), $exception->getCode()
  85.             );
  86.         }
  87.         return new ExceptionResponse($exception);
  88.     }
  89. }