【发布时间】:2013-02-04 14:31:52
【问题描述】:
我正在做一个 Symfony2 项目。对于有用的技术实践,我需要导入外部库。所以我做到了。但是这个库创建了一些从 Exception 扩展的 *_Exception 类。
我的外部库文件以:
结尾class CloudKey_Exception extends Exception {}
class CloudKey_RPCException extends CloudKey_Exception {public $data = null;}
class CloudKey_ProcessorException extends CloudKey_RPCException {}
class CloudKey_TransportException extends CloudKey_RPCException {}
class CloudKey_SerializerException extends CloudKey_RPCException {}
class CloudKey_AuthenticationErrorException extends CloudKey_RPCException {}
class CloudKey_RateLimitExceededException extends CloudKey_AuthenticationErrorException {}
class CloudKey_InvalidRequestException extends CloudKey_RPCException {}
class CloudKey_InvalidObjectException extends CloudKey_InvalidRequestException {}
class CloudKey_InvalidMethodException extends CloudKey_InvalidRequestException {}
class CloudKey_InvalidParamException extends CloudKey_InvalidRequestException {}
class CloudKey_ApplicationException extends CloudKey_RPCException {}
class CloudKey_NotFoundException extends CloudKey_ApplicationException {}
class CloudKey_ExistsException extends CloudKey_ApplicationException {}
class CloudKey_LimitExceededException extends CloudKey_ApplicationException {}
当我尝试在控制器中实例化我的对象时,Symfony 会返回:
致命错误:在第 513 行的 /var/www/carpediese/src/CD/DMBundle/Entity/CloudKey.php 中找不到类“CD\DMBundle\Entity\Exception”
我认为异常类是原生 PHP5+ 类。我怎样才能告诉 Symfony?
【问题讨论】:
-
\Exception是本机定义的。来自namespace docs,“导入规则是基于每个文件的,这意味着包含的文件不会继承父文件的导入规则”。因此,CloudKey_Exception文件内部肯定有问题,可能是use语句。我们可以看到代码吗? -
this 是您指的文件吗?如果是这样,那里似乎根本没有任何命名空间引用 - 你修改了吗?
-
我在 Exception
[...] extends \Exception {}之前添加了一个斜杠所以这个错误消失了。但是另一个出现了:Fatal error: Class 'CloudKey_Api' not found in /var/www/carpediese/src/CD/DMBundle/Entity/CloudKey.php on line 46是的,这是这个文件(DMCloud API)。我在文件顶部添加namespace CD\DMBundle\Entity;。 -
如果你不得不编辑这个文件,然后向维护者提出拉取请求,这样其他人就不会遇到同样的问题。
-
我不会拉我的更改,如果你制作 natif PHP,你不需要使用命名空间(不是必需的),你不需要更改文件。如果你使用框架,你必须知道如何在你的框架中添加外部库。谢谢大家:)
标签: php exception symfony namespaces