Symfony Dev异常显示在生产环境中

Symfony Dev异常显示在生产环境中,symfony,exception,production-environment,Symfony,Exception,Production Environment,我知道这是一个很大的禁忌。。。当我的站点处于活动状态时,不应该显示开发人员错误页面,我可以做些什么来确保开发人员环境错误消息不会出现在生产环境中 为什么会出现这些问题?我以为它在生产模式下默认关闭了?我错过了一个场景吗 注意:这是在共享服务器上。我使用的是app.php而不是app_dev.php 当我在本地进入生产模式时,它会正确显示正确的错误消息(如下所示): 哎呀!发生了一个错误 服务器返回“404未找到”。 有东西坏了。请通过[电子邮件]向我们发送电子邮件,并告知发生此错误时您正在执行

我知道这是一个很大的禁忌。。。当我的站点处于活动状态时,不应该显示开发人员错误页面,我可以做些什么来确保开发人员环境错误消息不会出现在生产环境中

为什么会出现这些问题?我以为它在生产模式下默认关闭了?我错过了一个场景吗

注意:这是在共享服务器上。我使用的是app.php而不是app_dev.php

当我在本地进入生产模式时,它会正确显示正确的错误消息(如下所示):

哎呀!发生了一个错误 服务器返回“404未找到”。 有东西坏了。请通过[电子邮件]向我们发送电子邮件,并告知发生此错误时您正在执行的操作。我们会尽快修好的。不便之处,敬请原谅

然而,在实时站点上,它显示了Symfony2开发环境错误消息


我试图通过在app/Resource/TwigBundle/views/Exception中创建一个error404.html.twig文件来生成一条自定义错误消息,但它仍然没有加载此文件,只显示开发人员错误消息。

在前端控制器中(
web/app.php
在Symfony标准版中),将创建
AppKernel
的实例
AppKernel
继承,它需要两个参数:

/**
 * Constructor.
 *
 * @param string $environment The environment
 * @param bool   $debug       Whether to enable debugging or not
 */
public function __construct($environment, $debug)
$environment
参数仅确定使用的配置(
config\u dev.yml
config\u prod.yml
等)。
$debug
参数用于启用或禁用调试(从而确定是否显示异常)

因此,在
app.php
中,更改:

$kernel = new AppKernel('prod', true);


这将用用户友好的错误页面替换详细的异常页面。

您实际使用的是Symfony的“开发”环境吗?请注意,
web
文件夹中有两个前端控制器,
app.php
app_dev.php
。您使用的是哪一个?使用app.php。它甚至不允许我使用app_dev.php,当我尝试使用它时,我会收到一条错误消息“不允许您访问此文件。有关详细信息,请查看app_dev.php。”在app.php中-$kernel=new AppKernel('prod',true);这可能是你的问题的原因,看我的答案。这很有效!在哪里可以找到$debug设置为true的位置?我按照前面提到的指南,将
'prod',true
。这是app_dev.php中的
'dev',true
?你是什么意思?创建新实例时,将
$debug
设置为true(
$kernel=new-AppKernel('prod',true);
)。构造函数在第77行的
vendor/symfony/symfony/src/symfony/Component/HttpKernel/Kernel.php中定义。不
$Kernel=new-AppKernel('prod',true)表示您正在将其设置为生产模式?这就是我感到困惑的地方。我在这里遵循了这个指南:他们在指南中提到,“最后,我们需要更改$kernel=new AppKernel('prod',false);将AppKernel对象实例化中的第二个参数从'false'更改为'true'。“是的,没错,第一个参数(prod/dev/…)设置环境。但是,第二个参数设置调试模式(true或false)。环境仅确定使用哪种配置,而不确定是否显示异常。(我今天也学到了一些新东西)参见Symfony的医生:
$kernel = new AppKernel('prod', false);