我正在尝试在Symfony 2中创建自定义异常页面,并且遵循Symfony 2指南here和here。第二个链接说要修改找到的Symfony\\Bundle\\TwigBundle\\Controller\\ExceptionController::showAction
控制器,但我只能在vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\Controller
文件夹中找到该文件。根据我的理解,我永远不应修改vendors
文件夹中的任何内容。
我想知道我应该修改的ExceptionController
在哪里?
答案 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);
}
}