src/EventSubscriber/EntitySubscriber.php line 42

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Edition;
  4. use App\Entity\PracticalDossier;
  5. use App\Entity\PracticalFile;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Tellaw\SunshineAdminBundle\Event\EntityEvent;
  9. use Tellaw\SunshineAdminBundle\Event\SunshineEvents;
  10. /**
  11.  * Ecoute les évènements déclencés lors de la création/MAJ d'une entité
  12.  */
  13. class EntitySubscriber implements EventSubscriberInterface
  14. {
  15.     private $entityManager;
  16.     private $defaultEditionId;
  17.     public function __construct(EntityManagerInterface $entityManager$defaultEditionId)
  18.     {
  19.         $this->entityManager $entityManager;
  20.         $this->defaultEditionId $defaultEditionId;
  21.     }
  22.     /**
  23.      * {@inheritdoc}
  24.      *
  25.      * @return array The event names to listen to
  26.      */
  27.     public static function getSubscribedEvents()
  28.     {
  29.         return [
  30.             SunshineEvents::ENTITY_PRE_FLUSHED => ['updatePreFlushedEntity'],
  31.         ];
  32.     }
  33.     /**
  34.      * Modification d'une entité avant flush
  35.      *
  36.      * @param EntityEvent $event
  37.      */
  38.     public function updatePreFlushedEntity(EntityEvent $event)
  39.     {
  40.         $entity $event->getEntity();
  41.         $entityClassMeta = new \ReflectionClass($entity);
  42.         $entityName $entityClassMeta->getShortName();
  43.         $entityUpdateMethod "updatePreFlushed$entityName";
  44.         if (method_exists($this$entityUpdateMethod)) {
  45.             $this->$entityUpdateMethod($entity);
  46.         }
  47.     }
  48.     private function updatePreFlushedPracticalDossier(PracticalDossier $dossier): void
  49.     {
  50.             $defaultEdition $this->entityManager->getRepository(Edition::class)->find($this->defaultEditionId);
  51.             if ($defaultEdition) {
  52.                 $dossier->setEdition($defaultEdition);
  53.             }
  54.     }
  55.     private function updatePreFlushedPracticalFile(PracticalFile $dossier): void
  56.     {
  57.         $defaultEdition $this->entityManager->getRepository(Edition::class)->find($this->defaultEditionId);
  58.         if ($defaultEdition) {
  59.             $dossier->setEdition($defaultEdition);
  60.         }
  61.     }
  62. }