Я пытаюсь создать пользовательскую страницу 404 для проекта Symfony 5, которая должна:
- Output a simple JSON-encoded string, like "Not found".
- Said string must be read from a translation resource.
- Добавьте дополнительный заголовок
Content-Type: application/json
.
В документации Symfony есть раздел, , который пытается объясните, как этого можно добиться, но информация кажется неполной/неверной, по-видимому, написанной для версии 4.X, даже указывая на несуществующие исходные файлы на GitHub.
Мне удалось создать контроллер ошибок, но он проглатывает все ошибки:
# config/packages/framework.yaml
framework:
error_controller: App\Controller\ErrorController::errorHandler
// src/Controller/ErrorController.php
class ErrorController extends AbstractController
{
public function errorHandler(TranslatorInterface $translator) : JsonResponse
{
return new JsonResponse($translator->trans('not_found'));
}
}
Проблема в том, что это приводит к тому, что любая ошибка (в том числе внутренняя) возвращает страницу 404.
Как я могу заставить этот контроллер/метод обрабатывать только ошибки 404 и оставить все остальное для обработки, как и прежде, самой структурой?
_format
json по умолчанию (это означает, что все это json api), это может уже выполнять большую часть вашей работы. Поэтому прочитайте раздел Переопределение вывода ошибок для форматов, отличных от HTML: symfony.com/doc/current/controller/ вернуться, если проблемы не исчезнут.... - person Jakumi   schedule 13.02.2020HttpNotFoundException
) и сгенерироватьResponse
и установить его на событие, которое должно немедленно остановить распространение этого события и вернуть любой ответ, который у вас есть. EventListeners также могут быть введены с помощью TranslatorInterface, так что это почти не имеет значения для вашего контроллера, но более специфично для 404. - person Jakumi   schedule 13.02.2020