register - symfony2 services




Doctrina de Symfony2s: generar: las entidades no generan clases repo (4)

Voy con los documentos de Symfony2 . Se dice que añadiendo

/**
 * @ORM\Entity(repositoryClass="Acme\StoreBundle\Entity\ProductRepository")
 */

en mi archivo de entidades y en la php app/console doctrine:generate:entities Acme deben crear el archivo ProductRepository . No lo hace No puedo aclarar esto más, simplemente no crea ese archivo, simplemente recrea los archivos de entidad que estaban allí antes.


Basado en la respuesta de Astucieux:

if (true) { 
    $fullRepositoryClassName = $name . "\\Repository\\" . $basename . "Repository";
    $output->writeln(
        sprintf('  > AND Repository <comment>%s</comment>', $fullRepositoryClassName)
    );           
    $repoGenerator->writeEntityRepositoryClass(
        $fullRepositoryClassName, $metadata->getPath());
} 

Para deshacerse de este problema y generar clases de recompra, puede modificar temporalmente el final del siguiente archivo : symfony \ vendor \ doctrine \ doctrine-doctrine \ Doctrine \ Bundle \ DoctrineBundle \ Command \ generateEntitiesDoctrineCommand.php

if ($m->customRepositoryClassName 
   && false !== strpos($m->customRepositoryClassName, $metadata->getNamespace())) {
     $repoGenerator->writeEntityRepositoryClass(
        $m->customRepositoryClassName, $metadata->getPath());
}

con el siguiente código:

if (true) { 
   $output->writeln(
     sprintf('  > AND Repository <comment>%s</comment>', $m->name . "Repository")
   );           
   $repoGenerator->writeEntityRepositoryClass(
     $m->name . "Repository", $metadata->getPath());
} 

Algunas explicaciones: en este código,

  • la condición if se simplifica con ' if (true) ' (y finalmente se puede suprimir completamente si lo desea)
  • $ m-> customRepositoryClassName se reemplaza por $ m-> nombre. "Repositorio"
  • Agregué algo de salida para estar bien informado (en la ventana del terminal) cuando se generan los archivos repo.

Si no usa la condición ' if (verdadero) ' y desea verificar las cosas por sí mismo, también puede agregar un caso facultativo en otro caso con una salida para estar bien informado en el futuro:

   else {
       $output->writeln(sprintf('  > NO repository generated for this class'));
    }

Después de las modificaciones, puede volver a ejecutar el comando como de costumbre:

php app/console doctrine:generate:entities AcmeStoreBundle

Este es un código temporal, porque el problema no está muy claro para mí hasta ahora, lo único que veo es que parece provenir de $ m-> customRepositoryClassName que devuelve una cadena vacía. Entonces, para encontrar otra solución definitiva, una forma podría ser verificar el método customRepositoryClassName del objeto de metadatos ...


Súper fácil solución a esto:

Genera una entidad si aún no lo has hecho:

php app/console doctrine:generate:entity --entity="AppBundle:EntityName" --fields="id:string(255) content:text(100)"

Ahora modifique estas líneas de comentarios a su Entidad previamente generada:

* @ORM\Table(name="TABLENAME")
* @ORM\Entity(repositoryClass="AppBundle\Entity\EntityNameRepository")

Ahora, simplemente ejecuta:

php app/console doctrine:generate:entities AppBundle:EntityNameRepository

Ahora tienes una entidad y un repositorio. :)


Si está utilizando archivos orm.yml para generar sus entidades, puede definir la clase de repositorio y luego generar las entidades de nuevo:

Acme\StoreBundle\Entity\Product:
type: entity
table: product
...
repositoryClass: Acme\StoreBundle\Entity\ProductRepository
...

Y luego ejecute:

php app/console doctrine:generate:entities AcmeStoreBundle