13

Вопрос по exception, php – PHP «Исключение не найдено»

У меня какая-то забавная проблема. Пытаясь понять, почему определенный веб-сайт возвращает http-код 500 в браузер, я нашел сообщение

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

в логе apache. Глядя на упомянутую строку:

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

Теперь я понимаю, как заставить сайт работать, но я все еще удивляюсь, почему код для генерирования исключения (который привел бы к более полезному сообщению журнала) не удался. Что может быть причиной?

  • Error: User Rate Limit Exceeded

    от
  • отличное объяснение, спасибо!

    от didi_X8
  • Былfixed 2012-08-11 in 72297152 by miguel250

    от
  • Определение класса отсутствует, просто класс не найден. Проверьте, содержат ли источники фактический файл, и дважды проверьте, правильно ли настроен его автозагрузчик. Поскольку это связано с интеграцией, возможно, это не было полностью протестировано поставщиком и\Exception имелось ввиду (родной, глобальный PHP)Exception класс) вместо.

    от hakre
  • Итак, обратный слеш заставляет использовать глобальное пространство имен? Если это так, пожалуйста, поставьте это как ответ, тогда я могу проголосовать.

    от didi_X8
  • Да, это будет выглядеть так:throw new \Exception('This bundle ... поскольку эта строка является пространством имен. Вероятно, стоит сначала проверить, есть ли этот класс исключений в коде пакета. Если нет, сообщите об ошибке для этого пакета.

    от hakre
  • но как он может потерпеть неудачу, если существует глобальный класс с таким именем? Будет ли вызов глобального класса Exception отличаться от этой строки? (Я не специалист по PHP, поэтому, может быть, мне здесь не хватает базовых знаний)

    от didi_X8
  • 32

    MZMailChimpBundle не содержит класс с именемException в пределахMZ\MailChimpBundle\Services Пространство имен.

    Из-за этого простого факта и сообщения об ошибке, которое должно сигнализировать об исключении, связана с проблемой интеграции (проверьте наличие библиотеки curl), я предполагаю, что это ошибка.

    Оригинал означал\Exception и неException Вот. Это довольно распространенная ошибка, которая может произойти с пространствами имен. Чтобы исправить файл, либо псевдоним / импорт\Exception какException:

    namespace MZ\MailChimpBundle\Services;
    use Exception;
    

    и / или изменитьnew линия вMZMailChimpBundle/Services/MailChimp.php:

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

    Смотрите также связанный вопрос:Как использовать & # x201C; root & # x201D; пространство имен php? и тот жеClass 'Namespace\Example' not found сообщение об ошибке:Вызов статического метода из класса в другом пространстве имен в PHP.

  • 1

    Мне кажется

    что строка пытается выбросить пользовательское исключение в текущем пространстве имен, а не встроенный класс исключений самого PHP