Возникла задача — заменить стандартное сообщение об ошибке на что-то более дружелюбное и понятное для пользователя. Например, если для текущего URI не определён роутинг — то выводить json:
{"status":"error","message":"Unknown endpoint."}
Вместо этого кирпичного безумия:

Решить эту задачу можно с помощью определения собственного обработчика событий.
Решается это достаточно просто. Для начала нужно создать файл, например ExceptionListener.php с таким содержимым:
<?php
namespace MyBundle;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
class ExceptionListener {
public function onKernelException(GetResponseForExceptionEvent $event) {
$exception = $event->getException();
if($exception instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) {
$response = json_encode(['status' => 'error', 'message' => 'Unknown endpoint.']);
$event->setResponse(Response::create($response));
}
}
}
Собственно в строке $exception = $event->getException(); извлекается объект-исключения из объекта-события. Далее происходит проверка, если это NotFoundHttpException исключение, тогда генерим для него юзер-френдли ответ.
Теперь в файл config.php нужно добавить:
$container
->autowire(\MyBundle\ExceptionListener::class)
->addTag('kernel.event_listener', ['event' => 'kernel.exception'])
;
На этом всё, можно деплоить и наслаждаться кошерным json-ответом!
Официальная документация Симфони не всегда даёт рабочие советы. Например, там имеется страница с заголовком How to Customize Error Pages и пунктами: Overriding the Default Error Templates, Overriding the Default ExceptionController и Working with the kernel.exception Event. Однако, первые 2 варианта не сработали, а третий вариант ссылается на страницу Events and Event Listeners где уже в пункте Creating an Event Listener рассказывается то, что я вкратце привёл в данной заметке.