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