1

每当我遇到类似的错误时Fatal error: Call to a member function getName() on a non-object in /var/www/...Controller.php on line 143,我的 symfony2-app 都会在 prod-environment 中显示一个空白页面。以上消息在开发环境中可用。我想在 prod-environment 中针对此类错误显示自定义页面。如何在 Symfony2 中实现它?

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

4

2 回答 2

5

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

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

于 2012-11-20T07:01:22.557 回答
1

我这样做:

类错误异常处理程序 {

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

    函数致命错误处理程序(){
        $error = error_get_last();
        if ($error['type'] === E_ERROR) {
            header('位置:/error-page-url');
        }
    }

}

错误异常处理程序();// 添加到 app.php

当然请记住命名空间等。

于 2014-11-07T20:50:54.493 回答