我正在研究一个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”类
我认为Exception类是本机PHP5 +类。我怎么能告诉Symfony?
答案 0 :(得分:2)
请记住在使用use
类的文件中正确设置Exception
语句。
编辑:
当您在namespace
声明下面引用PHP 5.3+中的任何类时,您需要添加您用于引用类的命名空间(或在引用该类时使用整个命名空间)。因此,如果您使用的Exception
类属于说someLibrary\ClouKey\Exceptions\
命名空间,则应该
use someLibrary\CloudKey\Exceptions\Exception;
位于文件的开头,位于namespace
下方,或者在定义新类时使用整个命名空间:
class CloudKey_Exception extends someLibrary\CloudKey\Exceptions\Exception {}
编辑2:
在使用Exception
的类中确实是本机PHP类,因此应使用\Exception
。您获得的错误是由CloudKey
类的这一部分生成的:
public function __get($name)
{
if (!isset($this->objects[$name]))
{
$class = 'CloudKey_' . ucfirst($name);
if (!class_exists($class))
{
$class = 'CloudKey_Api';
}
$this->objects[$name] = new $class($this->user_id, $this->api_key, $this->base_url, $this->cdn_url, $name, $this->proxy, $this->timeout);
$this->objects[$name]->parent = $this;
}
return $this->objects[$name];
}
根据文件(http://php.net/manual/en/language.oop5.basic.php):
如果包含类名称的字符串与new一起使用,则将创建该类的新实例。如果类在命名空间中,则在执行此操作时必须使用其完全限定名称。
因此,您必须编辑代码的引用部分,以使用字符串中的整个命名空间作为类名。