我对ZF2很新。我在ZF1的项目中有一堆学说实体,一个是用户实体。
我正在尝试扩展\ ZfcUserDoctrineORM \ Entity \ User以便我可以包括我以前的旧关系 - 但没有取得很大的成功。
如果我尝试运行架构生成器./doctrine-module orm:schema-tool:create
,则会收到错误消息,指出表名用户已存在。
到目前为止,我已尝试扩展该类并将我的类设置为UserEntityClass
return array(
'zfcuser' => array(
'UserEntityClass' => '\Application\Entity\User',
),
);
目前似乎还没有该模块的任何文档。
答案 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'
),
的孩子。这节省了大量的写作/思考;)