[英]Can't catch \InvalidArgumentException in Symfony2 Controller
我在Symfony2中发现了许多有关捕获异常的问题,这些答案似乎都不适用于我的情况。
我试图在控制器中调用$this->forward()
,并抛出一个\\InvalidArgumentException
,我无法捕获。。我只是得到了500错误页面。
500 Internal Server Error - InvalidArgumentException
我尝试捕获此异常:
try {
$response = $this->forward('FooBundle:Foo:bar', ['foo' => 'bar']);
} catch (\InvalidArgumentException $ex) {
error_log($ex->getMessage());
} catch (\Exception $ex) {
// this doesn't work either
}
Symfony在第65行的Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver
中抛出此异常:
throw new \InvalidArgumentException(sprintf('Controller "%s" for URI "%s" is not callable.', get_class($controller), $request->getPathInfo()));
这似乎是SPL例外。 它看起来好像我是正确捕获它。 那还缺少什么呢?
注意:这与我的开发环境有关。
有趣的是,将其放在我的控制器中确实可以工作 :
try {
throw new \InvalidArgumentException('Fake Exception');
} catch (\InvalidArgumentException $ex) {
// do nothing
}
你有没有尝试过:
$response = $this->forward('FooBundle:Foo:bar');
我认为这是正确的,除非您的控制器需要参数,然后将参数放入数组中。 你可以试试看吗? 我不确定这是否可以解决问题。
好的,所以500错误是前锋的响应主体-从技术上讲,这是可行的。 调用$this->forward()
并不是问题,问题是我在显示响应正文时未先检查它 。
通过执行此操作来修复它:
$response = $this->forward('FooBundle:Foo:bar', ['foo' => 'bar']);
$content = (500 !== $response->getStatusCode())
? $response->getContent()
: '';
return new Response($content);
注意: try {} catch (\\Exception $e) {}
完全没有必要,实际上是毫无意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.