2016-10-28 2 views
1

Я хотел бы создать пользовательский Exception на Symfony3, который возвращает ответ JSON, чтобы иметь возможность обрабатывать его в JavaScript впоследствии.Symfony3 custom Exception возвращает ответ JSON

Кто-нибудь знает, если это возможно и как это сделать?

+0

You может просто вернуть «новый ответ» (json_encode (...)) 'с соответствующими заголовками, конечно. – Andrew

+0

Это действительно то, что я сделал на данный момент. Но мне бы очень хотелось иметь возможность внести изменения в код между простой страницей, возвращающей код Json, и исключение, возвращающее код Json ... – Fab

+0

Вы можете обработать это через обработчик исключений, стандартный ответ json, класс исключения пузырьков (фантастическое слово для класса обработчика исключений), и я уверен, что есть другие способы. – Andrew

ответ

0

Создать новый исключение обработчика класса, как это:

namespace AppBundle\Subscriber; 

use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Symfony\Component\HttpFoundation\JsonResponse; 
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; 

class ExceptionSubscriber implements EventSubscriberInterface 
{ 

    /* ... */ 

    public static function getSubscribedEvents() 
    { 
     return [ KernelEvents::EXCEPTION => 'onKernelException' ]; 
    } 

    public function onKernelException(GetResponseForExceptionEvent $event) 
    { 
     $customResponse = new JsonResponse(['error' => 'My custom error message']); 
     $event->setResponse($customResponse); 
    } 

} 

Не забудьте зарегистрировать новую услугу в приложение/Config/services.yml:

app.exception_subscriber: 
    class: AppBundle\Subscriber\ExceptionSubscriber 
    tags: 
     - { name: kernel.event_subscriber } 
Смежные вопросы