【问题标题】:Extending the user entity of ZfcUserDoctrineORM in ZF2在ZF2中扩展ZfcUserDoctrineORM的用户实体
【发布时间】:2012-09-22 09:45:58
【问题描述】:

我对 ZF2 还是很陌生。我在 ZF1 的项目中有一堆理论实体,其中一个是用户实体。

我正在尝试扩展 \ZfcUserDoctrineORM\Entity\User 以便我可以包含我的旧关系 - 但没有取得很大成功。

如果我尝试运行架构生成器 ./doctrine-module orm:schema-tool:create,我会收到一条错误消息,指出表名用户已存在。

到目前为止,我已经尝试扩展类并将我的类设置为 UserEntityClass

return array(
    'zfcuser' => array(
        'UserEntityClass' => '\Application\Entity\User',
    ),
);

目前似乎还没有该模块的任何文档。

【问题讨论】:

    标签: doctrine-orm zend-framework2 zfdoctrine


    【解决方案1】:

    所以问题是默认的 ZfcUserDoctrineORM 实体仍在使用中。要解决此问题,您可以将 EnableDefaultEntities 设置为 false,如下所示:

    return array(
        'zfcuser' => array(
            'UserEntityClass' => '\Acme\Entity\User',
            'EnableDefaultEntities' => false
        ),
    );
    

    【讨论】:

      【解决方案2】:

      我从记忆中开始,因为前段时间我玩过 ZfcUser[DoctrineORM]。

      你不想扩展任何东西。相反,只需编写您自己的用户实体并使其实现 ZfcUser\Entity\UserInterface。

      然后确保您正确设置了配置(使用您自己的 UserInterface 实现,而不是默认值),您应该一切顺利。

      【讨论】:

      • 嗨 timdev,这就是我目前正在尝试的。我在 /config/autoload/ZfcUserDoctrineORM.global.php return array( 'zfcuser' => array( 'UserEntityClass' => '\WriplCom\Entity\User', ), ); 有一个 glob 配置文件我感觉我的问题要么是我的配置文件,要么是我试图让学说 cli 工具生成方案,或两者兼而有之。
      【解决方案3】:

      虽然 OP 的答案是正确的,但它并不完整。下面我做了什么以及为什么。

      创建自己的用户实体。 AbstractEntity 是用于我所有实体的一种,仅包含 ID 属性、getter/setter 和一些用于实体调试的全局功能。

      用户.php

      use Doctrine\ORM\Mapping as ORM;
      use Keet\Mvc\Entity\AbstractEntity;
      use ZfcUser\Entity\UserInterface;
      
      /**
       * Entity Class representing a post of our User module.
       *
       * @ORM\Entity
       * @ORM\Table(name="users")
       * @ORM\Entity(repositoryClass="Keet\User\Repository\UserRepository")
       * @ORM\HasLifecycleCallbacks
       */
      class User extends AbstractEntity implements UserInterface
      {
          /**
           * @var string
           * @ORM\Column(name="username", type="string", length=255, unique=true, nullable=false)
           */
          protected $username;
      
          /**
           * @var string
           * @ORM\Column(name="email", type="string", length=255, unique=true, nullable=false)
           */
          protected $email;
      
          /**
           * @var string
           * @ORM\Column(name="display_name", type="string", length=255, nullable=false)
           */
          protected $displayName;
      
          /**
           * @var string
           * @ORM\Column(name="`password`", type="string", length=255, nullable=false)
           */
          protected $password;
      
          /**
           * @var int
           * @ORM\Column(name="state", type="integer", length=3, nullable=false)
           */
          protected $state = 1;
      
          // Getters/Setters
      }
      

      zfcuser.config.php

      包含与OP's answer 相同的配置:

      'zfcuser' => [
          //Some other config
          'userEntityClass' => User::class,
          'EnableDefaultEntities' => false,
      ],
      

      module.config.php

      重要提示:覆盖 zfcuser 的默认学说实体配置!

      'doctrine' => [
          'orm_autoload_annotations' => true,
          'driver' => [
              __NAMESPACE__ . '_driver' => [
                  'class' => 'Doctrine\\ORM\\Mapping\\Driver\\AnnotationDriver',
                  'cache' => 'array',
                  'paths' => [
                      __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'src'
                      . DIRECTORY_SEPARATOR . 'Entity',
                  ]
              ],
              'orm_default'             => [
                  'drivers' => [
                      __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver',
                      'ZfcUser\Entity'  => __NAMESPACE__ . '_driver'
                  ],
              ],
              'zfcuser_entity' => [ // Section overwrites the default config for location of Annotation. Original found
                  // in vendor ZfcUserDoctrineModule /config/xml/zfcuser/ZfcUser.Entity.User.dcm.xml
                  'class' => 'Doctrine\\ORM\\Mapping\\Driver\\AnnotationDriver',
                  'paths' =>
                      __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'src'
                      . DIRECTORY_SEPARATOR . 'Entity',
              ],
          ],
      ],
      

      在上面你通常只有'driver' 和'orm_default' 配置。 ZfcUser 模块包含'zfcuser_entity' 配置,但将其指向它自己模块中的驱动程序。如果没有对不同驱动程序的浮动引用,请将其覆盖并将其指向您自己定义的驱动程序,由__NAMESPACE__ . '_driver' 定义。此外,在我的示例中,我使用AnnotationDriver 来读取注释,而 ZfcUser 模块使用XmlDriver。 ZfcUser 模块配置如下

      这是原始配置,在上面的示例中被覆盖

      'zfcuser_entity' => array(
          'class' => 'Doctrine\ORM\Mapping\Driver\XmlDriver',
          'paths' => __DIR__ . '/xml/zfcuser'
      ),
      

      此配置允许您完全使用自己的实体,但仍使用 ZfcUser 模块。

      在我的情况下,我可以将自己的 AbstractActionController 与我自己编写的 CRUD 操作一起使用,这需要 AbstractEntity 的孩子。这节省了大量的写作/思考;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-02
        • 1970-01-01
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        相关资源
        最近更新 更多