我试图在Doctrine 2.2 / Zend中集成Gedmo可翻译扩展,但我没有成功,需要一些帮助。我总是得到这个致命的错误:
未捕获的异常'Doctrine \ ORM \ Mapping \ MappingException' 消息'类AliasStaticPage不是有效实体 或映射超级。“ 在[...]库/学说/ ORM /映射/ MappingException.php:147
APC正在运行,Doctrine 2.2也运行良好(之前)。
这是我的Bootstrap(类似于Best practices for setting up with annotations):
$cache = new \Doctrine\Common\Cache\ApcCache();
$config->setQueryCacheImpl($cache);
$config->setResultCacheImpl($cache);
$config->setMetadataCacheImpl($cache);
$config->setProxyNamespace('App\Proxies');
$annotationReader = new Doctrine\Common\Annotations\AnnotationReader();
Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace(
'Gedmo\Mapping\Annotation',
'../library/DoctrineExtensions/Gedmo'
);
Doctrine\Common\Annotations\AnnotationRegistry::registerFile(
'../library/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'
);
$chainDriverImpl = new \Doctrine\ORM\Mapping\Driver\DriverChain();
$annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver($annotationReader,
array(
APPLICATION_PATH . '/models',
'../library/DoctrineExtensions/Gedmo/Translatable/Entity'
));
$chainDriverImpl->addDriver($annotationDriver, 'Entity');
$chainDriverImpl->addDriver($annotationDriver, 'Gedmo\Translatable\Entity');
$config->setMetaDataDriverImpl($chainDriverImpl);
以下是类定义的一部分:
<?php
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="alias")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorMap({"aliasProject" = "AliasProject",
* "aliasStaticPage" = "AliasStaticPage"})
*/
abstract class Alias
{
/**
* @Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
[...]
}
加入课程:
<?php
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="aliasStaticPage")
*/
class AliasStaticPage extends Alias
{
/**
* @ManyToOne(targetEntity="StaticPage")
* @JoinColumns({@JoinColumn(name="staticPage_id", referencedColumnName="id")})
*/
private $staticPage;
[...]
}
我也在doctrine-project.org尝试了这种方法但没有成功......
非常感谢任何想法。
答案 0 :(得分:0)
所以这是我的解决方案:
以这种方式实现AnnotationDriver导致第93行的\ Doctrine \ ORM \ Mapping \ Driver \ DriverChain中的相同对象哈希..不知道为什么,但它只循环一次。所以我将它拆分为2个annotationDrivers,一个用于我的模型,一个用于Gedmo实体:
$annotationReader = new Doctrine\Common\Annotations\AnnotationReader();
$annotationDriver1 = new Doctrine\ORM\Mapping\Driver\AnnotationDriver($annotationReader, array('../library/DoctrineExtensions/Gedmo/Translatable/Entity'));
$annotationDriver2 = new Doctrine\ORM\Mapping\Driver\AnnotationDriver($annotationReader, array(APPLICATION_PATH . '/models'));
$chainDriverImpl = new \Doctrine\ORM\Mapping\Driver\DriverChain();
$chainDriverImpl->addDriver($annotationDriver1, 'Gedmo\Translatable\Entity');
$chainDriverImpl->addDriver($annotationDriver2, 'Model');
接下来,添加的驱动程序的命名空间不符合我的命名空间,这是它从未结束查看类的方式。 我还必须将前缀@ORM \添加到所有ManyToOne,Join ...
就是这样。希望这可以在同样的情况下帮助其他人。