src/EventSubscriber/AccountSubscriber.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Account;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. class AccountSubscriber implements EventSubscriberInterface
  10. {
  11.     public function __construct(
  12.         private readonly EntityManagerInterface $entityManager,
  13.     ) {}
  14.     public static function getSubscribedEvents(): array
  15.     {
  16.         return [
  17.             KernelEvents::RESPONSE => [
  18.                 ['storeAdditionalDataToEntity'10],
  19.                 ['addAdditionalDataToResponse', -10],
  20.             ],
  21.         ];
  22.     }
  23.     public function storeAdditionalDataToEntity(ResponseEvent $event): void
  24.     {
  25.         $requestRoute $event->getRequest()->attributes->get('_route');
  26.         $persistRoutes = ['sulu_contact.post_account''sulu_contact.put_account'];
  27.         if (!\in_array($requestRoute$persistRoutestrue)) {
  28.             return;
  29.         }
  30.         $account $this->getEntityForResponse($event->getResponse());
  31.         if (!$account) {
  32.             return;
  33.         }
  34.         $requestData $event->getRequest()->request->all();
  35.         $account->setIdentificationNumber($requestData['in']);
  36.         $account->setTaxIdentificationNumber($requestData['tin']);
  37.         $account->setCaseNumber($requestData['case_number']);
  38.         $this->entityManager->persist($account);
  39.         $this->entityManager->flush();
  40.     }
  41.     public function addAdditionalDataToResponse(ResponseEvent $event): void
  42.     {
  43.         $requestRoute $event->getRequest()->attributes->get('_route');
  44.         $serializeRoutes = ['sulu_contact.get_account'];
  45.         if (!\in_array($requestRoute$serializeRoutestrue)) {
  46.             return;
  47.         }
  48.         $account $this->getEntityForResponse($event->getResponse());
  49.         if (!$account) {
  50.             return;
  51.         }
  52.         $responseData json_decode($event->getResponse()->getContent() ?: '{}'true);
  53.         $responseData['in'] = $account->getIdentificationNumber();
  54.         $responseData['tin'] = $account->getTaxIdentificationNumber();
  55.         $responseData['case_number'] = $account->getCaseNumber();
  56.         $event->getResponse()->setContent(json_encode($responseData) ?: null);
  57.     }
  58.     protected function getEntityForResponse(Response $response): ?Account
  59.     {
  60.         $id json_decode($response->getContent() ?: '{}'true)['id'] ?? null;
  61.         return $id $this->entityManager->getRepository(Account::class)->find($id) : null;
  62.     }
  63. }