让所有未定义的路由返回symfony 4中的404

让所有未定义的路由返回symfony 4中的404,symfony,routing,Symfony,Routing,我是Symfony的新手,正在使用Symfony 4.1进行第一个项目。我在“/”处配置了一个主页,该主页正在运行。这个项目的重点是创建一个RESTAPI,我在/API/argument/中定义了一个路由,它也可以正常工作 但是,当我导航到/api,或路径中有内容的任何其他路径(例如/car、/apple、/something/other)时,我在HTTP响应中得到404,但页面显示异常的回溯 Sorry, the page you are looking for could not be fo

我是Symfony的新手,正在使用Symfony 4.1进行第一个项目。我在“/”处配置了一个主页,该主页正在运行。这个项目的重点是创建一个RESTAPI,我在
/API/argument/
中定义了一个路由,它也可以正常工作

但是,当我导航到
/api
,或路径中有内容的任何其他路径(例如
/car
/apple
/something/other
)时,我在HTTP响应中得到404,但页面显示异常的回溯

Sorry, the page you are looking for could not be found.

NotFoundHttpException

No route found for "GET /oijoij"
in RouterListener.php line 139
at RouterListener->onKernelRequest(object(GetResponseEvent), 'kernel.request', object(EventDispatcher))in EventDispatcher.php line 212
...
然后在
.env
中设置

APP_ENV=test
APP_DEBUG=0
现在,我得到的只是一条纯文本错误消息,而不是一个漂亮的打印HTML回溯

Fatal error: Uncaught Symfony\Component\Routing\Exception\ResourceNotFoundException in www\project\var\cache\test\srcTestProjectContainerUrlMatcher.php:50 Stack trace: ...
我如何配置它,使未定义的路由返回404模板页面的404,而不返回回溯


我还在API控制器中抛出一个
BadRequestHttpException
,该异常也会被转储到页面上。这是否通过相同的方法得到解决?

正如许多人所指出的,错误页面仅为
dev
test
环境生成。在
prod
环境中(您应该在实时系统上使用),将显示一个通用404页面,您可以自定义该页面

负责显示开发中的详细错误页面或生产中的常规404页面的系统是Symfony的事件周期,更具体地说是
内核异常事件,它被监听,然后任何未捕获的错误和异常都将转换为错误页面响应。由于您正在编写一个API,您可能希望注册自己的侦听器并返回JSON响应,而不是常规HTML

此事件的事件订阅服务器可能如下所示:


如何自定义错误页:。如果您正在抛出异常,您可以在控制器中捕获它们,并在模板中显示一条漂亮的消息。@FrankB如果我正在抛出异常并用相同的方法捕获它,为什么不跳过抛出异常,然后返回一个带有我想要的HTTP代码和错误消息的响应?当然,在您的控制器中,您只需替换模板调用的抛出异常行您是否已尝试设置APP_ENV=prod?出于调试目的,返回跟踪错误是可见的。如果您安装了Symfony profiler,则这将配置为开发和测试环境的默认设置。这些奇特的错误页面仅在开发环境中生成。在prod中,它们将是标准的404非描述性页面。所以,基本上,你不必担心。
{
    "type": "NotFoundException",
    "message": "Could not find argument with id x"
}