src/Form/EventListener/Franchise/AddMediaFieldSubscriber.php line 29

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\EventListener\Franchise;
  4. use App\Entity\Admin\MediaNameInterface;
  5. use App\Entity\Franchise\Franchise;
  6. use App\Entity\Franchise\Media;
  7. use App\Form\Franchise\LogoType;
  8. use App\Repository\Admin\MediaNameRepository;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  11. use Symfony\Component\Form\FormEvent;
  12. use Symfony\Component\Form\FormEvents;
  13. class AddMediaFieldSubscriber implements EventSubscriberInterface
  14. {
  15.     public function __construct(
  16.         private MediaNameRepository $mediaNameRepository,
  17.     ) {
  18.     }
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [FormEvents::PRE_SET_DATA => 'preSetData'];
  22.     }
  23.     public function preSetData(FormEvent $event): void
  24.     {
  25.         /** @var Franchise $franchise */
  26.         $franchise $event->getData();
  27.         if (null !== $franchise && null !== $franchise->getId()) {
  28.             return;
  29.         }
  30.         if (=== $franchise->getMedia()->count()) {
  31.             $media = new Media();
  32.             $mediaName $this->mediaNameRepository->findOneByName(MediaNameInterface::MEDIA_NAME_LOGO);
  33.             $media->setMediaName($mediaName);
  34.             $franchise->addMedium($media);
  35.         }
  36.         $event->getForm()->add('media'CollectionType::class, [
  37.             'entry_type' => LogoType::class,
  38.             'entry_options' => ['label' => false],
  39.         ]);
  40.     }
  41. }