在 Symfony 4.4 中实现自定义错误控制器

问题描述 投票:0回答:2

我做了什么:

我创建了这个自定义控制器,因为我想向错误页面传递一些额外的变量。

#Controller/CustomErrorControler.php
namespace App\Controller;

use App\Controller\Base\BaseController;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;

class CustomErrorController extends BaseController
{

    public function show(FlattenException $exception, DebugLoggerInterface $logger = null)
    {
        return $this->getView('bundles/TwigBundle/Exception/error.html.twig', [
            "code" => $exception->getStatusCode(),
            "message" =>$exception->getStatusText()
        ]);
    }
}

和已启用

#config/packages/framework.yaml
error_controller: App\Controller\CustomErrorController::show

我直接按照文档进行操作。我的问题是,对于非生产阶段,我需要获取框架提供的默认异常模板。

我尝试扩展

Symfony\Component\HttpKernel\Controller\ErrorController
,但我收到自动装配错误。

也许我应该使用

Symfony\Component\ErrorHandler\ErrorRenderer\ErrorRendererInterface
有什么想法如何实现这个吗?

php symfony symfony4
2个回答
5
投票

通过使用不同的

framework.yaml
Prod

解决了这个问题

0
投票

如果您只想在生产中使用自定义控制器,您可以通过添加

config/packages/framework.yaml
子句来修改
when
文件,如下所示:

when@prod:
    framework:
        error_controller: App\Controller\CustomErrorController::show

这将确保您的自定义错误控制器仅在生产环境中使用,而默认的异常模板则在其他环境中使用

© www.soinside.com 2019 - 2024. All rights reserved.