首页 > 解决方案 > Symfony php自定义异常控制器不起作用

问题描述

我正在尝试在 php Symfony 4 中创建一个自定义异常控制器。基本上我想要做的是有一个默认路由,当没有其他路由匹配时调用它。

我正在尝试遵循此处的建议: https ://symfony.com/doc/current/controller/error_pages.html#custom-exception-controller

我在 configs>>pacakges 中创建了 twig.yaml 文件:

twig:
    exception_controller: App\Controller\ExceptionController::showException

我还创建了 ExceptionController 类:

<?php
namespace  App\Controller;


use Symfony\Component\HttpFoundation\Response;

class ExceptionController
{

    public function showException()
    {
        $response = new Response();
        $response->setContent("Some random text");
        $response->headers->set('Content-Type', 'text/plain');
        $response->headers->set('Access-Control-Allow-Origin', '*');
        $response->setStatusCode(200);
        return $response;
    }
}

当我访问一个不存在的 url 时,我希望看到文本“一些随机文本”,但我得到了默认的 symfony not found 页面:

在此处输入图像描述

有什么想法我可能做错了吗?

标签: phpsymfonyroutescontrollersymfony4

解决方案


您提到您创建了一个twig.yamlunder configs/packages

两件事情:

  1. 这应该config不是configs
  2. twig.yaml应该已经存在,不需要创建这个文件。

我怀疑如果你创建了这个文件,你在错误的地方创建了一个文件,Symfony 没有接收到你的配置更改。相反,将您的配置更改添加twig.yamlconfig/packages.

将自定义exception_controller路径添加到此现有(假定为默认)twig.yaml后,它应如下所示:

twig:
    default_path: '%kernel.project_dir%/templates'
    debug: '%kernel.debug%'
    strict_variables: '%kernel.debug%'
    exception_controller: App\Controller\ExceptionController::showException

我用全新的安装测试了它,它按预期工作。

希望这可以帮助 :)


应该调用您的方法showException,而不是endpoint按照您在twig.exception_controller配置中定义的方法。


推荐阅读