问题:我尝试在 Symfony 5 上注册 CustomErrorRenderer 来呈现我的 CustomException,但 TwigErrorRenderer 始终被调用。我认为自定义渲染器可能是首选?
CustomErrorRenderer.php:
namespace App\ErrorRenderer;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
use Symfony\Component\ErrorHandler\ErrorRenderer\ErrorRendererInterface;
class CustomErrorRenderer implements ErrorRendererInterface
{
public function render(\Throwable $exception): FlattenException
{
dd('CustomErrorRenderer.render() called');
// TODO check if CustomException, else refer to preset renderer...
}
}
Run Code Online (Sandbox Code Playgroud)
服务.yaml:
services:
App\ErrorRenderer\CustomErrorRenderer:
tags: ['error_renderer.renderer']
# also tried: ['error_renderer.renderer', 'error_renderer.html','error_handler.error_renderer' , 'error_handler.error_renderer.html']
Run Code Online (Sandbox Code Playgroud)
这有什么问题吗?
背景:我有一个 Web 应用程序,想要单独处理与我的内部业务逻辑相关的异常。例如,用户想要预订资源但当前不可用。虽然当前的错误/异常由 TwigErrorRenderer (或默认的 HtmlErrorRenderer )处理,但我想添加自己的渲染器(理想情况下只是扩展 TwigErrorRenderer ,以便我可以使用一些特定的、自定义的树枝模板)。这样,我的目标是拥有更好的 UI,例如,在显示 Web 应用程序的菜单的同时呈现我的自定义异常。由于我的异常与数据的访问方式(例如 http)无关,因此我不想使用 HttpExceptions 及其状态代码。