2012-09-22 11 views
6

Soy bastante nuevo en ZF2. Tengo un grupo de entidades de doctrina de mi proyecto en ZF1, una de ellas es una entidad de usuario.Extender la entidad de usuario de ZfcUserDoctrineORM en ZF2

Estoy tratando de extender \ ZfcUserDoctrineORM \ Entity \ User para que pueda incluir mis antiguas relaciones, pero sin mucho éxito.

Si intento ejecutar el generador de esquemas ./doctrine-module orm:schema-tool:create me sale un error que indica que el nombre de usuario ya existe.

Hasta ahora he intentado extender la clase y el establecimiento de mi clase que el UserEntityClass

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

Hay Doe no parece haber ninguna documentación del módulo hasta el momento.

Respuesta

7

El problema era que las entidades ZfcUserDoctrineORM predeterminadas todavía estaban en juego. Para resolver esto, puede establecer EnableDefaultEntities en falso como así:

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

Me voy de la memoria aquí, ya que jugué con ZfcUser [DoctrineORM] hace algún tiempo.

No desea extender nada. En su lugar, simplemente escriba su propia entidad de usuario y haga que implemente ZfcUser \ Entity \ UserInterface.

Luego, asegúrese de configurar su configuración correctamente (para usar su propia implementación de UserInterface, en lugar de la predeterminada), y debería estar listo para continuar.

+0

Hola Timdev, eso es lo que estoy intentando en la actualidad. Tengo un archivo de configuración glob en /config/autoload/ZfcUserDoctrineORM.global.php 'return array ( 'zfcuser' => array ( 'UserEntityClass' => '\ WriplCom \ Entity \ User', ), ); 'Tengo la sensación de que mi problema es mi archivo de configuración, o estoy tratando de obtener la herramienta cli de doctrina para generar el esquema, o ambos. – briangallagher

0

Aunque la respuesta del OP es correcta, no está completa. Debajo de lo que hice y por qué.

Crear una propia entidad de usuario. AbstractEntity es uno utilizado para todas mis Entidades, contiene solo la propiedad ID, getters/setter y alguna funcionalidad global para la depuración de Entidades.

User.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

contiene la misma configuración como OP's answer:

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

module.config.php

IMPORTANTE: ¡Sobrescriba la configuración predeterminada de la entidad de doctrina de 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', 
     ], 
    ], 
], 

En lo anterior habría que normalmente sólo tienen el 'driver' y 'orm_default' configuraciones. El módulo ZfcUser contiene la configuración 'zfcuser_entity', pero lo apunta al controlador dentro de su propio módulo. Para no tener una referencia flotante a un controlador diferente, sobrescríbalo y apúntelo hacia su propio controlador definido, definido por __NAMESPACE__ . '_driver'. Además, en mi ejemplo uso el AnnotationDriver para leer la anotación, mientras que el módulo ZfcUser usa el XmlDriver.ZfcUser módulo de configuración a continuación

Esta es la configuración original, sobrescrito en el ejemplo anterior

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

Esta configuración le permite utilizar plenamente su propia entidad, pero todavía utilizan el módulo ZfcUser.

En mi caso puedo usar mi propio AbstractActionController con mis acciones autocríticas CRUD, que esperan un hijo de AbstractEntity. Esto ahorra una gran cantidad de escritura/pensamiento;)

Cuestiones relacionadas