Aşağıdaki örnek, 404 NotFoundHttpException hatası oluştuğunda, kullanıcıyı onKernelException event listener ile başka bir sayfaya yönlendirir. Bunun için RedirectResponse() class kullanılır.


Listeners.yml


services:
application_backend.event_listener.kernel_exception:
class: Application\BackendBundle\EventListener\KernelExceptionListener
arguments: [@router]
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }

KernelExceptionListener.php


Eğer uygulamada herhangi bir nedenle HTTP 404 Not Found hatası oluşursa, ana sayfaya yönlendiriliriz.


namespace Application\BackendBundle\EventListener;

use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class KernelExceptionListener
{
private $router;
private $redirectRouter = 'application_frontend_default_index';

public function __construct(Router $router)
{
$this->router = $router;
}

public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();

if ($exception instanceof NotFoundHttpException) {
if ($event->getRequest()->get('_route') == $this->redirectRouter) {
return;
}

$url = $this->router->generate($this->redirectRouter);
$response = new RedirectResponse($url);
$event->setResponse($response);
}
}
}