我有一个包含多个Symfony服务的设置,这些服务都会在任何错误上抛出异常。
我让控制器充当这些服务的包装器。
我的一个封装控制器(我的前端发送请求)中的操作可能如下所示:
/**
* @Route("/someroute", name="some_route")
*/
public function myServiceWrapperFunctionAction(Request $request) {
try {
$this->get("myservice")->someFunctionThatThrowsException();
} catch(Exception $e) {
// This never happens when an exception is thrown from the service
return new Response($e->getMessage());
}
}
但是我似乎永远不会到达catch块,而是调试器被触发,就像try-catch甚至不存在一样。
Symfony调试器是否拦截了未在同一个类中捕获的所有异常?或者为什么在这种情况下异常消息不会返回到我的前端?
感觉我在这里错过了一个非常愚蠢的细节。
答案 0 :(得分:1)
如果你没有
use Exception;
在你的代码中,然后正确的try..catch应该是这样的:
try {
$this->get("myservice")->someFunctionThatThrowsException();
} catch(\Exception $e) {
// This never happens when an exception is thrown from the service
return new Response($e->getMessage());
}
因为只有Exception
会要求自动加载器加载\Your\Controller\Namespace\Exception
而不是\Exception