2011-08-29 4 views
6

No logro anular las vistas esquemáticas del generadorBundle.No se pueden anular las vistas de esqueleto estándar en Symfony2 GeneratorBundle

He tratado por primera vez por la adición de mi vista en /app/Resources/SensioGeneratorBundle/skeleton/crud/views/index.html.twig

No trabajó por lo que trataron de crear un nuevo paquete que se extiende SensioGeneratorBundle y copie mi vista en su carpeta de Recursos.

Ya puedo usar temas para formularios twig, pero necesito personalizar las vistas generadas por el comando doctrine: generate: crud.

Respuesta

8

En primer lugar: Las vistas esqueleto correspondientes se encuentran en:

vendor/bundles/Sensio/Bundle/GeneratorBundle/Resources/skeleton/crud 

rápida y sucia que debe estar bien reemplazando estos archivos de vista - pero eso no es lo que queremos;)

En:

vendor/bundles/Sensio/Bundle/GeneratorBundle/Command/GenerateDoctrineCrudCommand.php 

no es un descriptor de acceso para el generador:

protected function getGenerator() 
{ 
    if (null === $this->generator) { 
     $this->generator = new DoctrineCrudGenerator($this->getContainer()->get('filesystem'), __DIR__.'/../Resources/skeleton/crud'); 
    } 

    return $this->generator; 
} 

Puede intentar anular este método en su paquete extendido y establecer un $skeletonDir diferente en el constructor.

Editar:

Ejemplo rápido en mi entorno de prueba de cómo se puede lograr (Sólo hice una prueba rápida;):

generar un nuevo paquete para el generador personalizado: php app/console generate:bundle y siga las instrucciones. Una ruta no es necesaria. Elegí para este ejemplo: Acme/CrudGeneratorBundle (O use un paquete existente)

Cree una carpeta llamada "Comando" en el directorio del paquete recién creado.

Coloque una clase de comando en esta carpeta.

<?php 
//src/Acme/CrudGeneratorBundle/Command/MyDoctrineCrudCommand.php 

namespace Acme\CrudGeneratorBundle\Command; 

use Sensio\Bundle\GeneratorBundle\Generator\DoctrineCrudGenerator; 

class MyDoctrineCrudCommand extends \Sensio\Bundle\GeneratorBundle\Command\GenerateDoctrineCrudCommand 
{ 
    protected function configure() 
    { 
     parent::configure(); 
     $this->setName('mydoctrine:generate:crud'); 
    } 

    protected function getGenerator() 
    { 
     $generator = new DoctrineCrudGenerator($this->getContainer()->get('filesystem'), __DIR__.'/../Resources/skeleton/crud'); 
     $this->setGenerator($generator); 
     return parent::getGenerator(); 
    } 
} 

Copiar el vendedor/paquetes/Sensio/Bundle/GeneratorBundle/Recursos/esqueleto/crud a sus Recursos (en mi ejemplo "src/Acme/CrudGeneratorBundle/Recursos/crud")

+0

¡Definitivamente no quiero hacer el truco rápido y sucio! Pero traté de anular la función getGenerator y esto todavía no funciona. –

+1

Actualicé la respuesta con un ejemplo de cómo la hice funcionar. Aún así, esto es piratear. – madflow

Cuestiones relacionadas