我发现很多关于在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
}
答案 0 :(得分:0)
好的,所以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) {}
完全没必要,实际上毫无意义。