繁体   English   中英

在Symfony2控制器中无法捕获\\ InvalidArgumentException

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM