src/EventListener/FormThemeExtensionListener.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\Form\AbstractTypeExtension;
  5. use Symfony\Component\Form\Extension\Core\Type\FormType;
  6. use Symfony\Component\Form\FormInterface;
  7. use Symfony\Component\Form\FormRendererInterface;
  8. use Symfony\Component\Form\FormView;
  9. use Symfony\Component\HttpKernel\Event\RequestEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. class FormThemeExtensionListener extends AbstractTypeExtension implements EventSubscriberInterface
  12. {
  13.     private FormRendererInterface $form;
  14.     private bool $isBackofficeInde false;
  15.     private bool $isBackofficeAdmin false;
  16.     public function __construct(FormRendererInterface $form)
  17.     {
  18.         $this->form $form;
  19.     }
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             KernelEvents::REQUEST => 'onKernelRequest',
  24.         ];
  25.     }
  26.     public function onKernelRequest(RequestEvent  $event)
  27.     {
  28.         $routeName $event->getRequest()->attributes->get('_route''');
  29.         // logic to determine this is a backoffice admin route
  30.         if (substr($routeName010) === 'backoffice') {
  31.             $this->isBackofficeInde true;
  32.         }elseif (substr($routeName05) === 'admin') {
  33.             $this->isBackofficeAdmin true;
  34.         }
  35.     }
  36.     public function buildView(FormView $viewFormInterface $form, array $options)
  37.     {
  38.         if ($form->getParent() instanceof FormInterface) {
  39.             // don't modify child forms, just the root
  40.             return;
  41.         }
  42.         if ($this->isBackofficeInde) {
  43.             return $this->form
  44.                 ->setTheme($view'form/backoffice_form_layout.html.twig');
  45.         }
  46.         if ($this->isBackofficeAdmin) {
  47.             return $this->form
  48.                 ->setTheme($view'form/backoffice_admin_form_layout.html.twig');
  49.         }
  50.         return $this->form
  51.             ->setTheme($view'form/front_form_layout.html.twig');
  52.     }
  53.     public static function getExtendedTypes(): iterable
  54.     {
  55.         // extend base form type(FormType)
  56.         return [FormType::class];
  57.     }
  58. }