[英]Symfony2 Controller won't catch exception
这是我的删除操作的路由处理程序。 只要项目没有任何关联,它就可以很好地工作。
public function projectDeleteAction()
{
try {
$request = $this->get('request');
$my_id = $request->query->get('id');
$em = $this->get('doctrine.orm.entity_manager');
$item = $em->find('MyBundle:Main', $my_id);
$em->remove($item);
$em->flush();
$info = $item->getName();
$result = 0;
}
catch (Exception $e) {
$info = toString($e);
$result = -1;
}
return $this->render('MyBundle:Main:response.xml.twig',
array('info' => $info, 'result' => $result ));
}
我已经解决了尝试删除具有关联的项目的错误,但是通过这个过程,“刷新”抛出了 PDOException。 我尝试了各种方法来捕获它,但它似乎在 Symfony2 中被捕获,然后它以 HTTP 500 错误响应。 有没有办法让 Symfony2 不捕捉到这个,以便我可以处理它? 这是一个使用 AJAX 的 XML 响应,所以我宁愿只发送上面的错误代码。
如果您没有在 use 语句中将PDOException
指定为Exception
,请尝试更改Exception
→ \\Exception
。 PHP 尝试查找\\YourNamespaceWithController\\Exception
而不是\\Exception
(并且它不检查此类异常的存在)。
最好捕获您真正想要捕获的异常。 在这个例子中,可能是 Doctrine/DBAL/DBALException 和/或 Doctrine/DBA/DBAException。
因此
catch (Doctrine\DBAL\DBALException $e) {
$result = -1;
};
我会建议做类似的事情:
} catch (\Exception $e) {
switch (get_class($e)) {
case 'Doctrine\DBAL\DBALException':
echo "DBAL Exception<br />";
break;
case 'Doctrine\DBA\DBAException':
echo "DBA Exception<br />";
break;
default:
throw $e;
break;
}
}
这实际上捕获了 DB 异常,如果由于某种原因发生了其他一些异常,则将其重新抛出回 Symfony2。
我必须执行以下操作,这可能对某些用户有所帮助;
try{
$this->doctrine->em->persist($user);
$this->doctrine->em->flush();
}catch(Exception $e){
if($e->getPrevious()->getCode() == 23505){
//handle duplicate error, 23505 is for postgres, 23000 is mysql unique constraint.
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.