murph-core/src/core/EventListener/RedirectListener.php

46 lines
1.2 KiB
PHP
Raw Normal View History

2022-03-13 19:32:32 +01:00
<?php
namespace App\Core\EventListener;
use App\Core\Repository\RedirectRepositoryQuery;
2023-10-12 16:15:07 +02:00
use App\Core\Router\RedirectBuilder;
2022-03-13 19:32:32 +01:00
use App\Core\Router\RedirectMatcher;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* class RedirectListener.
*
* @author Simon Vieille <simon@deblan.fr>
*/
class RedirectListener
{
public function __construct(
protected RedirectMatcher $matcher,
protected RedirectBuilder $builder,
protected RedirectRepositoryQuery $repository
) {
2022-03-13 19:32:32 +01:00
}
public function onKernelException(ExceptionEvent $event)
{
$request = $event->getRequest();
if (!$event->getThrowable() instanceof NotFoundHttpException) {
return;
}
$redirects = $this->repository
->orderBy('.sortOrder')
->where('.isEnabled=true')
2022-03-13 19:32:32 +01:00
->find()
;
foreach ($redirects as $redirect) {
if ($this->matcher->match($redirect, $event->getRequest()->getUri())) {
$event->setResponse($this->builder->buildResponse($redirect, $event->getRequest()));
}
}
}
}