Exception symfony 1.4:如何将异常消息传递到error.html.php?

Exception symfony 1.4:如何将异常消息传递到error.html.php?,exception,symfony1,symfony-1.4,Exception,Symfony1,Symfony 1.4,我试着使用这里描述的特殊变量$message,但这个变量似乎没有在symfony 1.4中定义,至少它不包含以这种方式传递给异常的消息抛出新的sfException('some message') 您知道将此消息传递到error.html.php的其他方法吗?您需要执行一些自定义错误处理。我们自己执行了一个向前的自定义symfony操作。不过要小心,这个动作本身也可能引发异常,您需要考虑到这一点 以下可能是一个良好的开端。首先为事件添加一个监听器,一个好位置是ProjectConfigurati

我试着使用这里描述的特殊变量
$message
,但这个变量似乎没有在symfony 1.4中定义,至少它不包含以这种方式传递给异常的消息
抛出新的sfException('some message')


您知道将此消息传递到error.html.php的其他方法吗?

您需要执行一些自定义错误处理。我们自己执行了一个向前的自定义symfony操作。不过要小心,这个动作本身也可能引发异常,您需要考虑到这一点

以下可能是一个良好的开端。首先为事件添加一个监听器,一个好位置是ProjectConfiguration.class.php:

$this->dispatcher->connect('application.throw_exception', array('MyClass', 'handleException'));
使用事件处理程序可能足以处理异常,例如,如果您只想将堆栈跟踪发送给管理员。我们想转发一个自定义操作来显示和处理反馈表单。我们的事件处理程序如下所示:

class MyClass {
  public static function handleException(sfEvent $event) {
    $moduleName = sfConfig::get('sf_error_500_module', 'error');
    $actionName = sfConfig::get('sf_error_500_action', 'error500');
    sfContext::getInstance()->getRequest()->addRequestParameters(array('exception' => $event->getSubject()));
    $event->setReturnValue(true);
    sfContext::getInstance()->getController()->forward($moduleName, $actionName);
  }
}
现在,您可以在settings.yml中配置要转发到的模块和操作

all:
  .actions:
    error_500_module:       error
    error_500_action:       error500

在操作本身中,您现在可以做任何您想做的事情,但有例外,例如,显示反馈表以联系管理员。您可以通过使用$request->getParameter('exception')来获取异常本身。

我发现了另一个技巧-
sfContext
可以用来将异常消息传递给
error.html.php
,但必须使用自定义函数来抛出异常。例如:

class myToolkit {
  public static function throwException($message) 
    {
      sfContext::getInstance()->set('error_msg', $message);
      throw new sfException($message);
    }
而不是使用
抛出新的sfException('some message')
您应该使用
myToolkit::throweexception('some message')


要在
error.html.php
中显示消息,请使用

我想我找到了一个更简单的答案。在Symfony 1.4上,
$message
确实没有定义,但是
$exception
是(它包含exception对象)

所以只需回显
$exception->message


+1非常感谢!我们的系统支持主题化,如果没有这一点,我们就无法支持错误500页的主题化。非常感谢。谢谢你的回答!将自定义函数连接到
应用程序。抛出异常是否覆盖symfony在该事件上的默认行为?如果是,我可以通过在自定义函数中调用
self::parent()
来阻止它吗?我只想添加一些功能。@Tapper您应该可以通过修改返回值来实现这一点,请尝试$event->setReturnValue(false)