Evet, Symfony istisnaları işleme olanağı sunar. Yüksek önceliğe sahip kernel.exception
etkinliğini gözlemleyen bir etkinlik dinleyicisi oluşturmanız gerekir. Böyle bir olay işleyicisi oluşturun:
kernel.listener.ajax_authentication_listener:
class: Acme\Bundle\MyBundle\EventListener\AjaxAuthenticationListener
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: 250 }
Not kullanılan priority
parametre,:
<?php
namespace Acme\Bundle\MyBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
class AjaxAuthenticationListener
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
$request = $event->getRequest();
$format = $request->getRequestFormat();
$exception = $event->getException();
if ('json' !== $format || (!$exception instanceof AuthenticationException && !$exception instanceof AccessDeniedException)) {
return;
}
$response = new JsonResponse($this->translator->trans($exception->getMessage()), $exception->getCode());
$event->setResponse($response);
$event->stopPropagation();
}
}
Şimdi böyle, senin service.yml biri 'ler olay işleyicinizi kayıt var Symfony'e, işleyiciyi daha düşük önceliğe sahip kendi işleyicilerinden önce yürütmesini söylemek.
Ve ön ucunda jQuery için bu tür bir hatayla sayfayı yeniden yükleyen bir olay işleyicisi kaydedebilirsiniz.
Referans için bkz this gist.