2012-04-03 25 views
9

Ho un problema in qualche modo divertente. Durante il tentativo di capire perché un certo sito web restituisce il codice HTTP 500 al browser, ho trovato il messaggioPHP "Eccezione non trovata"

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

nel log di Apache. Guardando la linea menzionata:

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

io ora capire come ottenere il funzionamento del sito, ma ancora mi chiedo il motivo per cui il codice per gettare l'eccezione (che avrebbe comportato un messaggio di log più utili) non è riuscita. Quale potrebbe essere la ragione?

+3

La definizione di classe manca, è solo una classe non trovata. Controlla se le fonti contengono il file vero e controlla se il caricatore automatico è configurato correttamente. Poiché questo è correlato all'integrazione, potrebbe essere che questo non sia stato completamente testato dal fornitore e che fosse usato '\ Exception' (nativo, classe globale' Exception' di PHP). – hakre

+0

ma come può fallire se c'è una classe globale con quel nome? Una chiamata alla classe Exception globale sarebbe diversa da questa linea? (Io non sono un professionista di PHP, quindi forse non ho conoscenze di base qui) –

+3

Sì, sembrerebbe: 'lanciare new \ Exception ('Questo bundle ...' come quella linea è namespace. Probabilmente vale la pena di controllare prima se esiste questa classe di eccezioni all'interno del codice del bundle, in caso contrario segnalare un bug per quel pacchetto – hakre

risposta

27

Il MZMailChimpBundle non contiene una classe denominata Exception all'interno del MZ\MailChimpBundle\Services namespace .

A causa di questo semplice fatto e poiché il messaggio di errore che l'eccezione dovrebbe segnalare è correlato a un problema di integrazione (controllare la libreria di arricciatura) presumo che si tratti di un bug.

L'originale ha significato \Exception e non Exception qui. È un errore piuttosto comune che può accadere con i namespace. Per correggere il file, o alias/import \Exception come Exception:

namespace MZ\MailChimpBundle\Services; 
use Exception; 

e/o modificare la riga new in MZMailChimpBundle/Services/MailChimp.php:

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

Vedi pure la relativa domanda: How to use “root” namespace of php? e quello con la stesso Classe 'Spazio dei nomi \ Esempio' non trovato messaggio di errore: Calling a static method from a class in another namespace in PHP.

+0

grande spiegazione , grazie! –

+0

+1 risolto il mio problema –

+0

È stato [riparato 2012-08-11 in 72297152 da miguel250] (https://github.com/miguel250/MZMailChimpBundle/commit/722971523da673354a4a4285574ed914e57a74ef) – hakre

1

a me sembra che la linea sta cercando di un'eccezione definita dall'utente nello spazio dei nomi corrente, non la classe Exception built-in di PHP per sé

Problemi correlati