2016-01-06 58 views
4

我正在使用Symfony 3和PHP 7升級應用程序。我不斷收到此錯誤。我不確定它來自哪裏或如何解決它。Symfony ExceptionHandler拋出自己的錯誤

的Symfony \分量\調試\的ExceptionHandler ::手柄()必須是例外

+1

您需要提供堆棧跟蹤或導致此錯誤的代碼以獲得任何幫助。 –

+0

Stack trace: #0 [內部函數]:Symfony \ Component \ Debug \ ExceptionHandler-> handle(Object(Error)) #1 {main} /Applications/MAMP/htdocs/upgrade/vendor/symfony/symfony/src/Symfony/Component/Debug/ExceptionHandler.php第67行 – Jeremy

回答

8

TL的一個實例; DR:一個PHP錯誤代碼中的某處觸發。在PHP 5中,它被觸發爲一個簡單的PHP錯誤;在PHP 7中,它被拋出爲Error,現在傳入Symfony的異常處理程序。

此錯誤可能一直存在於您的應用程序中,並且由於error_reportingdisplay_errors設置而被吞下。在PHP中改變


的錯誤處理機制7.錯誤,現在拋出的Error類的實例,可以通過一個異常處理程序捕獲。有關更多信息,請參見the documentation

PHP 7個變化最錯誤是如何通過PHP的報道。不是通過PHP 5使用的傳統錯誤報告機制報告錯誤,現在通過拋出錯誤例外來報告大多數錯誤。

與正常例外情況一樣,這些異常將會冒泡,直到它們到達第一個匹配的catch塊。如果沒有匹配塊,則將調用與set_exception_handler()一起安裝的任何默認異常處理程序,並且如果沒有默認異常處理程序,則該異常將轉換爲致命錯誤,並將像傳統錯誤那樣處理。

但是,請注意Error類不會擴展Exception類(它們都實現了Throwable接口,雖然)。

由於Symfony的異常處理程序註冊爲使用set_exception_handler方法的異常處理器,這個處理器將有各類在你的代碼拋向四周未捕獲Error實例的引用,但它預計按照其類型的Exception無法處理它們暗示。

目前,您可以通過實現自己的ExceptionHandler(您可以使用它代替Symfony的)來實現handle(Throwable $error)函數來解決此問題,這樣您還可以捕獲PHP錯誤。

+0

但我無法擴展ExceptionHandler,因爲類中的所有內容都是「private」:/ ... Symfony 3.4有不同的解決方案嗎? –