【问题标题】:How can i use entities from symfony2 in another project using only doctrine2我如何在另一个项目中使用 symfony2 中的实体,只使用学说 2
【发布时间】:2012-01-20 13:46:34
【问题描述】:

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

当使用教义作为组件时,它需要没有 ORM 的标签(例如@entity)。

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

如何设置非 symfony 项目以使用带有 @ORM\ 标签的这些类?

【问题讨论】:

  • 你打算使用不同于 symfony 的其他框架吗?如果有,是哪一个?
  • 是的...但它是一个遗留的自定义框架。
  • hmm.. 我认为只要你有一种自动加载类的方法,你就可以让它工作......使用 php 中的新命名空间,你可以将学说库放在框架的“lib”文件夹中,自动加载它,然后从您的实体中执行类似use \YourLibs\Doctrine\ORM as ORM 的操作,这样您就不必更改实体中的任何内容...虽然不太确定...
  • 我尝试了类似的方法,但没有成功。命令行工具无法识别属性
  • 您是否考虑过使用不同的映射方法(例如 yaml 或 xml)而不是注释来管理,因为它可以提供解决问题的简单替代方法?

标签: php symfony doctrine-orm


【解决方案1】:

@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');

【讨论】:

    【解决方案2】:

    目前我已经完成了 MadManMonty 在 cmets 中向我提出的问题:

    您是否考虑过使用不同的映射方法(例如 yaml 或 xml)来管理而不是注释,因为它可以提供一种简单的替代方法来解决该问题? – MadManMonty

    【讨论】:

      【解决方案3】:

      我通过在 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多