symfony 2中的实体具有以@ORM \开头的教义标签(例如@ORM \ Entity)。
当使用doctrine作为组件时,它期望没有ORM的标签(例如@entity)。
如果我想在另一个使用doctrine但没有symfony的项目中使用symfony项目中的这些实体,则会导致问题。
如何设置非symfony项目以将这些类与@ORM \ tags一起使用?
答案 0 :(得分:0)
@ORM\
前缀不是Symfony特有的。它在Doctrine Common文档中:http://www.doctrine-project.org/docs/common/2.2/en/reference/annotations.html#introduction
您必须按照文档中的说明使用AnnotationRegistry::registerFile()
注册注释文件。另外,请检查Symfony的app / autoload.php文件。它正在注册自动加载器:在AnnotationRegistry
AnnotationRegistry::registerLoader(function($class) use ($loader) {
$loader->loadClass($class);
return class_exists($class, false);
});
AnnotationRegistry::registerFile(__DIR__.'/../vendor/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');
答案 1 :(得分:0)
目前我已经在MadManMonty建议的工作中对我提出的评论问题:
您是否考虑使用其他映射方法(例如yaml或xml)来管理而不是注释,因为它可能提供一个简单的替代方法来解决此问题? - MadManMonty
答案 2 :(得分:0)
通过在EntityManager :: create()中将$ useSimpleAnnotationReader设置为false,我得到了这样的工作:
// bootstrap.php
require_once "vendor/autoload.php";
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\Common\Annotations\AnnotationRegistry;
//IGNORE IF YOU DONT NEED SERIALIZER/VALIDATOR
AnnotationRegistry::registerAutoloadNamespace('JMS\Serializer\Annotation', $vendorPath . '/jms/serializer/src');
AnnotationRegistry::registerAutoloadNamespace('Symfony\Component\Validator\Constraint', $vendorPath . '/symfony/validator');
//IGNORE IF YOU DONT NEED SERIALIZER/VALIDATOR
AnnotationRegistry::registerFile($vendorPath . '/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');
$paths = array("/path/to/entities-or-mapping-files");
$isDevMode = false;
// the connection configuration
$dbParams = array(
'driver' => 'pdo_mysql',
'user' => 'root',
'password' => '',
'dbname' => 'foo',
);
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
//LAST PARAMETER SETS $useSimpleAnnotationReader TO FALSE
$entityManager = EntityManager::create($dbParams, $config, null, null, false);