我如何使用doctrine2在另一个项目中使用symfony2中的实体

时间:2012-01-20 13:46:35

标签: php symfony doctrine-orm

symfony 2中的实体具有以@ORM \开头的教义标签(例如@ORM \ Entity)。

当使用doctrine作为组件时,它期望没有ORM的标签(例如@entity)。

如果我想在另一个使用doctrine但没有symfony的项目中使用symfony项目中的这些实体,则会导致问题。

如何设置非symfony项目以将这些类与@ORM \ tags一起使用?

3 个答案:

答案 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);