Exception Symfony 1.4-在生产模式下,forward404将消息传递给error404模板

Exception Symfony 1.4-在生产模式下,forward404将消息传递给error404模板,exception,exception-handling,symfony1,Exception,Exception Handling,Symfony1,在我的应用程序中,我想使用$this->forward404(“未找到数据”);必要时输出单个错误消息。 在开发模式下,它可以正常工作。当我在生产模式下运行我的应用程序时(其中getApplicationConfiguration()中的debug设置为false),我不再收到消息 在settings.yml中,我设置了一个自定义404操作。 全部: .行动: 错误\u 404\u模块:主 错误\u 404\u操作:custom404 如何将forward404传递到custom404Succe

在我的应用程序中,我想使用$this->forward404(“未找到数据”);必要时输出单个错误消息。 在开发模式下,它可以正常工作。当我在生产模式下运行我的应用程序时(其中getApplicationConfiguration()中的debug设置为false),我不再收到消息

在settings.yml中,我设置了一个自定义404操作。 全部: .行动: 错误\u 404\u模块:主 错误\u 404\u操作:custom404


如何将forward404传递到custom404Success.php模板???

prod
dev
之间,404处理是完全不同的。在
prod
中,传递给
forward404
的消息只会写入日志,而不会传递给处理程序操作

解决这个问题的方法有很多,但最快(尽管最脏)的方法是将消息存储在某个静态变量中,以便404处理程序可以在进程到达后访问它,例如

在你的行动中

<?php
CommonActions::$message404 = 'My message';
$this->forward404();
如果您能够获取,您可以看到该方法抛出一个sfError404Exception,该异常处理环境方面的问题。在dev中,它简单地抛出一个异常,而在prod中,它可能是通过set_exception_处理程序(“my_handle”)处理的

您可以重写此方法(它是公共的)

公共函数forward404($message=null)
{
//写入会话并通过404_模板呼叫
$this->getUser()->setFlash(“404message”,$message);
父::forward404($message);
}

Hi。您应该在问题中使用“代码”标记以增加可读性。无论如何,我也很高兴得到这个答案
<?php
if (self::$message404) {
    $this->message = self::$message404;
}
public function forward404($message = null)
{
  // write to session and call from 404_template via <?php echo $sf_user->getFlash("404message") ?>
  $this->getUser()->setFlash("404message", $message);

  parent::forward404($message);
}