【发布时间】:2014-09-27 04:04:12
【问题描述】:
我正在使用 Symfony 2.4 并试图创建一个更强大的异常处理程序,在某些 PDO / Doctrine 异常上,将响应的状态代码从 500 更改为 503 以显示与我们的标准不同的自定义错误消息(在换句话说,它返回 error503.html.twig 模板而不是 error500.html.twig)。到目前为止,我已经创建了一个扩展 TwigBundle ExceptionController 的自定义异常控制器,我已经更改了 config.yml 中的 Twig 异常参数,并且我能够捕获一旦 Symfony 在 HttpKernel 中调用 handle(...) 时引发的任何和所有异常。 php:185(所以这实际上是第二次调用 handle ——这次是在 HttpKernel 而不是 AppKernel 上)。我将避免发布所有这些代码,而是指示读者here 了解更多关于我的方法的信息,如果他们不熟悉的话。所有这些代码都工作得很好——我可以修改我的应用程序中抛出的任何应用程序,所以你可以假设我正确地使用了上述方法。
我遇到的问题是,除了捕获 Symfony 中抛出的异常之外,我还希望能够捕获在调用 HttpKernel 的 handle 方法之前抛出的异常(例如 PDO不正确的数据库凭据引发的访问被拒绝异常)。为了给你一个更具体的纲要,在app_dev.php,你有:
$response = $kernel->handle($request);
调用:
/**
* {@inheritdoc}
*
* @api
*/
public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
if (false === $this->booted) {
$this->boot();
}
return $this->getHttpKernel()->handle($request, $type, $catch);
}
现在,如果在$this->boot() 中抛出异常,它看起来不会在任何地方被捕获,因此,我看不到任何在 Symfony 中优雅地处理所述异常的方法。只有在 $this->getHttpKernel()->handle($request, $type, $catch) 中包含的 try / catch 块中抛出异常时,它才会被捕获并使用 Symfony 代码优雅地处理。我错了吗?有谁知道使用 Symfony 处理在此上下文中抛出的异常的方法?如果这已经在其他地方得到回答,我提前道歉。
【问题讨论】: