2012-04-03 29 views
9

Tengo un problema de alguna manera divertido. Al tratar de entender por qué un determinado sitio web devuelve el código HTTP 500 al navegador, encontré el mensajePHP "Excepción no encontrada"

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

en el registro de Apache. En cuanto a la línea mencionada:

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

Ahora entiendo cómo obtener el sitio funcionando, pero todavía me pregunto por qué el código para lanzar la excepción (que habría dado lugar a un mensaje de registro más útiles) falló. ¿Cuál podría ser el motivo?

+3

Falta la definición de clase, simplemente no se encuentra la clase. Compruebe si las fuentes contienen el archivo real y vuelva a verificar si el autocargador está configurado correctamente. Como esto se relaciona con la integración, es posible que el proveedor no haya probado completamente y, en su lugar, se refirió a '\ Exception' (clase nativa, Exception' de PHP). – hakre

+0

, pero ¿cómo puede fallar si hay una clase global con ese nombre? ¿Sería una invocación de la clase Excepción global diferente de esta línea? (No soy un experto en PHP, entonces quizás carezco de conocimientos básicos aquí) –

+3

Sí, se vería así: 'throw new \ Exception ('Este paquete ...' ya que esa línea está en el espacio de nombres. Probablemente valga la pena consultar primero si existe esa clase de excepción dentro del código del paquete. De lo contrario, informe un error para ese paquete. – hakre

Respuesta

27

El MZMailChimpBundle no contiene una clase llamada Exception dentro del MZ\MailChimpBundle\Services espacio de nombres .

Debido a ese simple hecho y como el mensaje de error que la excepción debería indicar está relacionado con un problema de integración (compruebe la biblioteca curl), supongo que se trata de un error.

El original ha significado \Exception y no Exception aquí. Es un error algo común que puede ocurrir con espacios de nombres. Para solucionar el archivo, ya sea de alias/importación \Exception como Exception:

namespace MZ\MailChimpBundle\Services; 
use Exception; 

y/o cambiar la línea new en MZMailChimpBundle/Services/MailChimp.php:

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

Ver también la pregunta relacionada: How to use “root” namespace of php? y el que tiene el mismo Clase 'Namespace \ Example' no encontrado mensaje de error: Calling a static method from a class in another namespace in PHP.

+0

gran explicación , gracias! –

+0

+1 solucionado mi problema –

+0

Ha sido [solucionado 2012-08-11 en 72297152 por miguel250] (https://github.com/miguel250/MZMailChimpBundle/commit/722971523da673353a4a4285574ed914e57a74ef) – hakre

1

A mi me parece que la línea está tratando de lanzar una excepción definida por el usuario en el espacio de nombres actual, no a la clase de excepción incorporada de PHP en sí

Cuestiones relacionadas