gpt4 book ai didi

Symfony 5 自定义 404 页面

转载 作者:行者123 更新时间:2023-12-03 08:48:48 26 4
gpt4 key购买 nike

我正在尝试为 Symfony 5 项目创建一个自定义 404 页面,该项目必须:

  1. 输出一个简单的 JSON 编码字符串,例如“未找到”。
    • 所述字符串必须从翻译资源中读取。
  2. 有一个额外的 Content-Type: application/json header 。

Symfony 文档中有一个部分,that attempts to explain how this can be achieved ,但该信息似乎不完整/不正确,显然是为 4.X 版本编写的,甚至指向 GitHub 上不存在的源文件。

我已经成功创建了一个错误 Controller ,但它吞噬了所有错误:

# 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 页面。

如何让这个 Controller /方法只处理 404 错误,而让框架本身像以前一样处理其他所有内容?

最佳答案

对于正在为 Symfony 应用程序寻找 JSON 404 页面解决方案的其他人:

我一直在寻找一种使用 Controller 来处理特定错误情况的方法,因为这似乎是表面上最简单的选择,但这似乎不可能,或者至少我还没有弄清楚如何实现。

最后,我使用 events and event listeners 找到了解决方案:

配置:

# config/services.yaml

services:

...

# This listener handles only 404 errors in PROD mode
App\EventListener\ExceptionListener:
tags:
- { name: kernel.event_listener, event: kernel.exception }

事件监听器:

// src/EventListener/ExceptionListener.php
class ExceptionListener {
public function onKernelException(ExceptionEvent $event) : void
{
if (
$_ENV['APP_ENV'] != 'prod'
|| !$event->isMasterRequest()
|| !$event->getThrowable() instanceof NotFoundHttpException
) {
return;
}

// Send a not found in JSON format
$event->setResponse(new JsonResponse($this->translator->trans('not_found')));
}
}

关于Symfony 5 自定义 404 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60202595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com