У меня есть какой-то смешной вопрос. При попытке понять, почему определенный веб-сайт возвращает 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.');
Теперь я понимаю, как заставить сайт работать, но я все еще удивляюсь, почему код для исключения исключения (который привел к более полезному сообщению журнала) потерпел неудачу. Что может быть причиной?
MZMailChimpBundle не содержит класс с именем Exception
в пространстве имен MZ\MailChimpBundle\Services
.
Из-за этого простого факта и сообщения об ошибке, которое должно быть вызвано исключением, связано с проблемой интеграции (проверка библиотеки curl). Я предполагаю, что это ошибка.
Оригинал означал \Exception
а не Exception
здесь. Это распространенная ошибка, которая может произойти с пространствами имен. Чтобы исправить файл, либо alias / import \Exception
as Exception
:
namespace MZ\MailChimpBundle\Services; use Exception;
и / или изменить new
строку в MZMailChimpBundle/Services/MailChimp.php
:
throw new \Exception('This bundle needs the cURL PHP extension.');
См. Также связанный с этим вопрос: как использовать «корневое» пространство имен php? и тот, у кого есть одно и то же поле «Namespace \ Example», не найденное сообщение об ошибке: вызов статического метода из класса в другое пространство имен в PHP .
Полагает, что строка пытается выбросить определяемое пользователем исключение в текущем пространстве имен, а не встроенный класс Exception самого PHP