2012-04-03 10 views
9

Ich habe ein irgendwie lustiges Problem. Bei dem Versuch, zu verstehen, warum eine bestimmte Website http Code 500 zu Browser zurückgibt, fand ich die NachrichtPHP "Ausnahme nicht gefunden"

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

in Apache log. Mit Blick auf der genannte Linie:

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

ich jetzt verstehen, wie die Website zum Laufen zu bringen, aber ich frage mich immer noch, warum der Code für das Werfen der Ausnahme (die in einer hilfreichen Lognachricht geführt hätte) ist fehlgeschlagen. Was könnte der Grund sein?

+3

Die Klassendefinition fehlt, es ist nur Klasse nicht gefunden. Überprüfen Sie, ob die Quellen die tatsächliche Datei enthalten, und überprüfen Sie, ob der Autoloader richtig konfiguriert ist. Da dies mit der Integration zusammenhängt, kann es sein, dass dies vom Hersteller nicht vollständig getestet wurde und "\ Exception" stattdessen (die native, globale 'Exception'-Klasse von PHP) gemeint war. – hakre

+0

aber wie kann es fehlschlagen, wenn es eine globale Klasse mit diesem Namen gibt? Würde ein Aufruf der globalen Exception-Klasse von dieser Zeile abweichen? (Ich bin kein PHP-Profi, also fehlt mir hier vielleicht das Grundwissen) –

+3

Ja, es würde folgendermaßen aussehen: 'new \ Exception werfen ('This bundle ...', da diese Zeile Namespaced ist. Es lohnt sich wahrscheinlich, zuerst nachzusehen Wenn es diese Ausnahmeklasse innerhalb des Bundle-Codes gibt. Wenn nicht, melden Sie einen Fehler für dieses Bundle. – hakre

Antwort

27

Die MZMailChimpBundle keine Klasse enthält namens Exception im MZ\MailChimpBundle\Services Namespace .

Aufgrund dieser einfachen Tatsache und als die Fehlermeldung, dass die Ausnahme sollte ein Integrationsproblem beziehen (überprüfen Sie für die Curl-Bibliothek) nehme ich an, dass dies ein Fehler ist.

Das Original bedeutet \Exception und nicht Exception hier. Es ist ein etwas häufiger Fehler, der mit Namespaces passieren kann. Um dies zu beheben, die Datei entweder alias/Import \Exception als Exception:

namespace MZ\MailChimpBundle\Services; 
use Exception; 

und/oder ändern Sie die new Linie in MZMailChimpBundle/Services/MailChimp.php:

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

Siehe auch die damit verbundene Frage: How to use “root” namespace of php? und das mit der selbe Klasse 'Namespace \ Beispiel' nicht gefunden Fehlermeldung: Calling a static method from a class in another namespace in PHP.

+0

großartige Erklärung , danke! –

+0

+1 behoben mein Problem –

+0

Wurde [behoben 2012-08-11 in 72297152 von miguel250] (https://github.com/miguel250/MZMailChimpBundle/commit/722971523da673353a4a4285574ed914e57a74ef) – hakre

1

mir Sieht aus, dass die Linie eine benutzerdefinierte Ausnahme im aktuellen Namensraum zu werfen versucht, nicht die eingebaute Ausnahmeklasse von PHP selbst

Verwandte Themen