您需要进行一些自定义错误处理。我们自己实现了对自定义 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') 获取异常本身