2012-04-03 142 views
9

我有一個不知何故有趣的問題。 在試圖理解爲什麼某個網站返回的HTTP代碼500到瀏覽器,我在Apache日誌中發現的消息PHP「Exception not found」

PHP Fatal error: Class 'MZ\\MailChimpBundle\\Services\\Exception' not found in /var/www/website/vendor/bundles/MZ/MailChimpBundle/Services/MailChimp.php on line 41 

。 望着提到行:

throw new Exception('This bundle needs the cURL PHP extension.'); 

我現在明白如何讓現場工作,但我仍然不知道爲什麼拋出異常(這將導致更有益的日誌消息)的代碼失敗。 可能是什麼原因?

+3

類定義丟失,它只是找不到類。檢查源代碼是否包含實際文件,並仔細檢查自動加載器是否配置正確。由於這與集成有關,它可能並沒有經過供應商的全面測試,而''Exception'意味着(PHP的本地全局'Exception'類)。 – hakre 2012-04-03 20:08:32

+0

但如果有一個全球班有這個名字,它怎麼會失敗?全局Exception類的調用看起來與此行不同嗎? (我不是一個PHP專家,所以也許我缺乏這方面的基礎知識) – 2012-04-03 20:12:12

+3

是的,它看起來像:'throw new \ Exception('This bundle ...',因爲該行是命名空間的。如果bundle代碼中有這個異常類,如果沒有,則報告這個bundle的bug – hakre 2012-04-03 20:13:13

回答

27

MZMailChimpBundle不包含在MZ\MailChimpBundle\Services名稱空間內命名Exception類。

由於這個簡單的事實,並且異常應該發出的錯誤信息與集成問題(檢查捲髮庫)有關,所以我認爲這是一個錯誤。

原來的意思是\Exception而不是Exception在這裏。命名空間可能會發生一些常見的錯誤。要修復該文件,無論是別名/導入\ExceptionException

namespace MZ\MailChimpBundle\Services; 
use Exception; 

和/或改變MZMailChimpBundle/Services/MailChimp.phpnew行:

throw new \Exception('This bundle needs the cURL PHP extension.'); 

見,以及相關的問題:How to use 「root」 namespace of php?和一個與相同找不到類'命名空間\示例'錯誤消息:Calling a static method from a class in another namespace in PHP

+0

很好的解釋,謝謝! – 2012-04-04 16:51:59

+0

+1解決了我的問題 – 2012-11-17 06:14:22

+0

已經[fixed 2012-08-11於72297152 by miguel250](https://github.com/miguel250/MZMailChimpBundle/commit/722971523da673353a4a4285574ed914e57a74ef) – hakre 2013-06-24 23:17:45

1

在我看來,該行正試圖拋出一個用戶定義的異常在當前的命名空間,而不是內置的異常處理類PHP本身