Symfony2 - 修改异常控制器

时间:2013-01-14 17:22:43

标签: symfony

我正在尝试在Symfony 2中创建自定义异常页面,并且遵循Symfony 2指南herehere。第二个链接说要修改找到的Symfony\\Bundle\\TwigBundle\\Controller\\ExceptionController::showAction控制器,但我只能在vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\Controller文件夹中找到该文件。根据我的理解,我永远不应修改vendors文件夹中的任何内容。

我想知道我应该修改的ExceptionController在哪里?

4 个答案:

答案 0 :(得分:1)

如果您需要覆盖symfony错误模板,请从

中获取模板
vendor/symfony/src/Symfony/Bundle/TwigBundle/Resources/views/Exception

并将要自定义的内容放在app / Resources / TwigBundle / views / Exception目录中。然后根据需要进行自定义。

如果您想根据应用程序呈现模板,请参阅我的回答@ customize 403 error page depening on route in symfony 2.0

答案 1 :(得分:1)

如果您只需要更改错误页面的布局,那么在app/Resources/TwigBundle/views/Exception上创建文件就足够了。

但是如果您需要将其他参数传递到错误页面,则应覆盖默认的ExceptionController。 为此,您应该创建一个扩展默认控制器的新控制器:

use Symfony\Bundle\TwigBundle\Controller\ExceptionController;
class MyExceptionController extends ExceptionController {
    //override the showAction() or findTemplate() method here
}

然后你需要告诉symfony使用你的新控制器。 这可以通过在parameters.yml文件中添加新参数来完成:

parameters:
    twig.controller.exception.class: YourBundle\Controller\MyExceptionController

答案 2 :(得分:0)

对我而言,这不是

parameters:
twig.controller.exception.class: YourBundle\Controller\MyExceptionController

但是

parameters:
twig.controller.exception.class: YourNamespace\YourBundle\Controller\MyExceptionController

答案 3 :(得分:0)

使用Symfony 4,您需要这样做:

class TwigExceptionControllerCompilerPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        $definition = $container->getDefinition('twig.controller.exception');
        $definition->setClass(TwigExceptionController::class);
    }
}