在ZF2中扩展ZfcUserDoctrineORM的用户实体

时间:2012-09-22 09:45:58

标签: doctrine-orm zend-framework2 zfdoctrine

我对ZF2很新。我在ZF1的项目中有一堆学说实体,一个是用户实体。

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

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

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

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

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

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

我要从记忆中走出来,因为我曾经和ZfcUser [DoctrineORM]玩过一段时间。

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

然后确保正确设置配置(使用自己的UserInterface实现,而不是默认设置),你应该好好去。

答案 2 :(得分:0)

虽然OP的答案是正确的,但它并不完整。低于我的成就和原因。

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

<强> user.php的

Cells(aRow.Row, 2).Address

<强> zfcuser.config.php

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

A

<强> module.config.php

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

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' => [ //Some other config 'userEntityClass' => User::class, 'EnableDefaultEntities' => false, ], 和''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', ], ], ], 配置。 ZfcUser模块包含'driver'配置,但将其指向其自己的模块中的驱动程序。要没有对不同驱动程序的浮动引用,请覆盖它并将其指向由orm_default'定义的您自己定义的驱动程序。此外,在我的示例中,我使用'zfcuser_entity'来读取注释,而ZfcUser模块使用__NAMESPACE__ . '_driver'。 ZfcUser模块配置在

下面

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

AnnotationDriver

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

在我的情况下,我可以将自己的XmlDriver与我自己编写的CRUD操作一起使用,这些操作期望'zfcuser_entity' => array( 'class' => 'Doctrine\ORM\Mapping\Driver\XmlDriver', 'paths' => __DIR__ . '/xml/zfcuser' ), 的孩子。这节省了大量的写作/思考;)