【问题标题】:Handling Fatal Errors with the Twig Exception Controller使用 Twig 异常控制器处理致命错误
【发布时间】:2014-06-23 16:56:33
【问题描述】:

我正在开发一个 Symfony 项目,并且正在尝试为生产环境创建用户友好的错误页面。为此,我重写了twig.exception_controller 参数。该过程在Symfony Documentation 中进行了描述。在覆盖异常控制器时,我已经能够为不存在路由或抛出未捕获异常的实例创建自定义错误页面。我无法解决致命错误,这就是我的问题所在。

是否可以在 Symfony 中捕获/处理致命错误?当发生致命错误时,我不会尝试继续运行应用程序 (as the answerer of this question suggests)。除了具有函数调用堆栈跟踪的标准页面之外,我只想显示一个错误页面。

我尝试使用register_shutdown_function 设置关闭功能,但这并没有阻止显示默认错误页面(带有堆栈跟踪)。

谢谢!

【问题讨论】:

  • 致命错误到底是什么意思?通常导致应用程序崩溃的错误会得到错误代码 500 Bad request,可以使用 exception_controller 处理
  • 例如,如果调用了未定义的方法,则会抛出FatalErrorException。 exception_controller 没有处理这个异常,我不知道为什么。所有其他异常都由exception_controller 处理。

标签: symfony fatal-error


【解决方案1】:

您可以将可能失败的进程放入 try 块中

try {
  // assert this fails because you have some buggy code here
  $foos=$fooService->getFoosByDateTime(); 

}catch(\Exception $e){
  //you can catch the exception 
  $exceptionMessage= $e->getMessage();
  $this->redirect("your_custom_route_to_error_page",{"error":$exceptionMessage});
}

【讨论】:

    【解决方案2】:

    您可以启用捕获致命错误并将其转换为异常,如调试组件中所示。

    // 如果我记得正确的 Symfony Fullstack 已经这样做了 http://symfony.com/doc/current/components/debug/introduction.html

    然后你可以编写一个自己的异常处理程序,它以用户友好的方式捕获和处理异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多