每当我收到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
帮帮我吗?
答案 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
当然请记住命名空间等。