src/Seo/EventSubscriber/UrlSeoControllerSubscriber.php line 31

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace App\Seo\EventSubscriber;
  3. use App\Seo\Entity\UrlSeo;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Sonata\SeoBundle\Seo\SeoPageInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. /**
  10.  * Цепляем нужную метаинформацию по URL
  11.  *
  12.  * Class UrlSeoControllerSubscriber
  13.  * @package App\EventSubscriber\Seo
  14.  */
  15. class UrlSeoControllerSubscriber implements EventSubscriberInterface
  16. {
  17.     public function __construct(private EntityManagerInterface $entityManager, private SeoPageInterface $seoPage)
  18.     {
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return [
  23.             KernelEvents::CONTROLLER => 'onKernelController',
  24.         ];
  25.     }
  26.     public function onKernelController(ControllerEvent $event): void
  27.     {
  28.         $request $event->getRequest();
  29.         $decoded urldecode($request->getPathInfo());
  30.         /** @var UrlSeo|null $item */
  31.         $item $this->entityManager
  32.             ->getRepository(UrlSeo::class)
  33.             ->findOneBy([
  34.                 'url' => $decoded
  35.             ]);
  36.         if (!$item) {
  37.             return;
  38.         }
  39.         if ($item->getTitle()) {
  40.             $this->seoPage->setTitle($item->getTitle());
  41.         }
  42.         if ($item->getKeywords()) {
  43.             $this->seoPage->addMeta('name''keywords'$item->getKeywords());
  44.         }
  45.         if ($item->getDescription()) {
  46.             $this->seoPage->addMeta('name''description'$item->getDescription());
  47.         }
  48.     }
  49. }