19

我有一个有趣的问题。在试图了解为什么某个网站向浏览器返回 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.');

我现在了解如何使站点正常工作,但我仍然想知道为什么引发异常的代码(这会导致更有用的日志消息)失败。可能是什么原因?

4

3 回答 3

42

MZMailChimpBundle不包含命名空间ExceptionMZ\MailChimpBundle\Services命名的类。

由于这个简单的事实以及异常应该发出的错误消息与集成问题有关(检查 curl 库),我认为这是一个错误。

原文有意思\Exception,不在Exception这里。这是一个在命名空间中可能发生的常见错误。要修复文件,请使用别名/导入\ExceptionException

namespace MZ\MailChimpBundle\Services;
use Exception;

和/或更改以下newMZMailChimpBundle/Services/MailChimp.php

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

另请参阅相关问题:如何使用 php 的“根”命名空间?和一个具有相同Class 'Namespace\Example' not found 的错误消息:Calling a static method from a class in another namespace in PHP

于 2012-04-03T21:07:20.993 回答
4

扩展@hakre 答案,您可以通过以下方式简化其用法:

use \Exception as Exception;

这样你就可以抛出异常而无需记住反斜杠,例如:

throw new Exception('This bundle needs the cURL PHP extension.');
于 2020-04-07T09:08:11.550 回答
1

在我看来,该行试图在当前命名空间中抛出用户定义的异常,而不是 PHP 本身的内置异常类

于 2012-04-03T20:18:38.117 回答