在Symfony2 Controller中无法捕获\ InvalidArgumentException

时间:2017-02-23 18:15:58

标签: php symfony exception-handling

我发现很多关于在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
}

1 个答案:

答案 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) {}完全没必要,实际上毫无意义。