Symfony2中的用户友好错误页面

时间:2012-11-20 06:49:25

标签: symfony exception-handling

每当我收到Fatal error: Call to a member function getName() on a non-object in /var/www/...Controller.php on line 143之类的错误时,我的symfony2-app会在prod-environment中显示空白页面。以上消息在dev-environment中可用。我想在prod-environment中显示这样的错误的自定义页面。如何在Symfony2中实现它?

更新: 可以kernel.event_listener帮帮我吗?

2 个答案:

答案 0 :(得分:5)

你无法在symfony中真正实现它。 symfony不会处理致命错误,而是由PHP扩展本身处理。 Symfony代码永远不会有机会完成执行,因为致命错误让php通过自己的设备处理错误。 PHP错误处理由error_reporting()设置,error_handler由set_error_handler()设置。在开发环境中,php error reporting设置为E_ALL以显示所有错误。在生产环境中,错误和调试消息设置为0,并且出于美观和安全原因而不显示(某些错误消息可能显示密码等)。最好的建议是在部署到生产之前修复所有致命错误。要捕获并显示致命错误的自定义页面必须使用php set错误处理 - http://php.net/manual/en/function.set-error-handler.php完成。

对于非致命错误,您可以创建可显示的自定义错误页面视图 - http://symfony.com/doc/2.0/cookbook/controller/error_pages.html

答案 1 :(得分:1)

我是这样做的:


class ErrorExceptionHandler {

    function __construct() {
        register_shutdown_function(array($this, 'fatalErrorHandler'));
    }

    function fatalErrorHandler() {
        $error = error_get_last();
        if ($error['type'] === E_ERROR) {
            header('Location: /error-page-url');
        }
    }

}

ErrorExceptionHandler(); // add to app.php

当然请记住命名空间等。