src/EventSubscriber/TaxonRedirectSubscriber.php line 27

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber;
  4. use Setono\SyliusRedirectPlugin\Model\Redirect;
  5. use Setono\SyliusRedirectPlugin\Repository\RedirectRepositoryInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Form\FormEvent;
  8. use Symfony\Component\Form\FormEvents;
  9. final class TaxonRedirectSubscriber implements EventSubscriberInterface
  10. {
  11.     public function __construct(
  12.         private RedirectRepositoryInterface $redirectRepository
  13.     ) {
  14.     }
  15.     public static function getSubscribedEvents(): array
  16.     {
  17.         return [
  18.             FormEvents::POST_SUBMIT => 'onPostSubmit',
  19.         ];
  20.     }
  21.     public function onPostSubmit(FormEvent $event): void
  22.     {
  23.         $form $event->getForm();
  24.         $taxon $event->getData();
  25.         if (null === $taxon || !$form->has('original_slug')) {
  26.             return;
  27.         }
  28.         $originalSlug $form->get('original_slug')->getData();
  29.         $newSlug $taxon->getTranslation('en_US')->getSlug();
  30.         $originalSlug is_string($originalSlug) ? trim($originalSlug) : null;
  31.         $newSlug is_string($newSlug) ? trim($newSlug) : null;
  32.         if (!$originalSlug || !$newSlug || $originalSlug === $newSlug) {
  33.             return;
  34.         }
  35.         $source '/' $originalSlug;
  36.         $destination '/' $newSlug;
  37.         $existingRedirect $this->redirectRepository->findOneBy(['source' => $source]);
  38.         if (null !== $existingRedirect) {
  39.             return;
  40.         }
  41.         $redirect = new Redirect();
  42.         $redirect->setSource($source);
  43.         $redirect->setDestination($destination);
  44.         $redirect->setPermanent(true);
  45.         $redirect->setEnabled(true);
  46.         $redirect->setOnly404(false);
  47.         $this->redirectRepository->add($redirect);
  48.     }
  49. }