【发布时间】:2014-10-27 15:35:54
【问题描述】:
场景:
Symfony2 项目使用主数据库和用于远程数据的辅助(远程)数据库。远程数据库可能已关闭,或者它们之间的连接可能会被切断。在这种情况下,我仍然希望执行正常继续,尽管通知遥控器已关闭。
到目前为止,我已经在我的事件监听器中尝试过这个:
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
if (
$exception instanceof ConnectionException ||
$exception instanceof PDOException ||
$exception instanceof \PDOException ||
$exception instanceof DBALException
) {
$this->flash->flashMessage('remote_server_connection_error', array(), FlashBagUtil::TYPE_ALERT);
// $kernel = $event->getKernel();
// $request = $event->getRequest();
// $response = $kernel->handle($request, HttpKernelInterface::MASTER_REQUEST, true);
// $response->setStatusCode(Response::HTTP_OK);
// $event->setResponse($response);
$event->stopPropagation();
echo 'works';
}
}
如果我取消注释响应部分,我会按预期重新调整页面,但状态为 500,而不是我明确设置的 200。 “works”得到回显,因此事件部分工作正常。
对于来自 Symfony2 kernel.exception 监听器的其余请求,处理异常并忽略它的正确方法是什么?
非常感谢
【问题讨论】: