2011-08-29 14 views
6

Non riesco a sovrascrivere le visualizzazioni dello scheletro del generatoreBundle.Impossibile sovrascrivere le viste standard dello scheletro in Symfony2 GeneratorBundle

Ho prima provato con l'aggiunta di mio punto di vista in /app/Resources/SensioGeneratorBundle/skeleton/crud/views/index.html.twig

Non ha funzionato così ho cercato di creare un nuovo bundle che si estende SensioGeneratorBundle e copia la mia vista nella sua cartella Risorse.

Sono già in grado di utilizzare temi per i moduli di ramoscello, ma ho bisogno di personalizzare le viste generate dalla dottrina: generare: comando crud.

risposta

8

Prima di tutto: Le corrispondenti viste scheletro si trovano qui:

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

rapido e sporco si dovrebbe andare bene sovrascrivendo i file vista - ma non è quello che abbiamo vogliamo;)

In:

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

c'è una funzione di accesso per il generatore:

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

    return $this->generator; 
} 

Si può provare a sovrascrivere questo metodo nel pacchetto esteso e impostare un diverso $skeletonDir nel costruttore.

Edit:

esempio veloce nel mio ambiente di prova come può essere raggiunto (Ho solo fatto un test rapido;):

generare un nuovo bundle per il generatore personalizzato: php app/console generate:bundle e seguire la Istruzioni. Un percorso non è necessario. Ho scelto per questo esempio: Acme/CrudGeneratorBundle (o utilizzare un pacchetto esistente)

Creare una cartella denominata "Comando" nella nuova directory del gruppo.

Inserire una classe di comando in questa cartella.

<?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(); 
    } 
} 

Copiare il fornitore/fasci/Sensio/Bundle/GeneratorBundle/Resources/scheletro/CRUD alle risorse (nel mio esempio "src/Acme/CrudGeneratorBundle/Resources/crud")

+0

Sicuramente non voglio fare il trucco veloce e sporco! Ma ho provato a sovrascrivere la funzione getGenerator e questo ancora non funziona –

+1

Ho aggiornato la risposta con un esempio su come ho funzionato. Ancora - questo è un hack. – madflow

Problemi correlati