Jak mogę wywołać przekierowanie do określonego routera w detektorze zdarzeń?Przekierowanie za pomocą detektora zdarzeń dla wszystkich "Nie znaleziono trasy Nie znaleziono 404 - NotFoundHttpException"
Istnieje wiele przykładów, ale nie mogłem znaleźć jednego dla "GetResponseForExceptionEvent". Dla przykładu, kiedy przekazuję @roter
jako argument $this->router....
, wydaje się, że tak nie działa.
Sprawdziłem te ale prawdopodobnie coś przeoczyć:
- Show a specific route instead of error page (404) - Symfony2
- symfony2: hook into NotFoundHttpException for redirection
- Symfony2 redirect for event listener?
- Symfony2: Getting Route in Page Load Event Listener
- Redirect if the user is logged in
service.yml
services:
kernel.listener.kernel_request:
class: Booking\AdminBundle\EventListener\ErrorRedirect
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
słuchacz zdarzenia:
namespace Booking\AdminBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class ErrorRedirect
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
if ($exception instanceof NotFoundHttpException) {
// redirect to '/' router or '/error'
//$event->setResponse(...........);
}
}
}
Co doskonałą odpowiedź! Dziękuję Ci bardzo. +++ 1 – BentCoder
Ale czy to nie działa tylko w Dev, a nie w środowiskach Prod? –
Opcja 2 działała dobrze. Dzięki! – TechyTee