2011-08-29 8 views
6

Nie uda mi się zastąpić widoków szkieletu generatora.Nie można przesłonić standardowych widoków szkieletu w Symfony2 GeneratorBundle

ja najpierw próbowała dodając mój pogląd w /app/Resources/SensioGeneratorBundle/skeleton/crud/views/index.html.twig

To nie pracował tak próbowałem stworzyć nowy pakiet rozciągającą SensioGeneratorBundle i skopiuj mój widok w jego folderze Zasoby.

Już używam motywów do tworzenia gałązek, ale muszę spersonalizować widoki generowane przez doktrynę: generate: crud command.

Odpowiedz

8

Przede wszystkim: Odpowiednie poglądy szkielet znajdują się tutaj:

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

szybki i brudny powinno być w porządku nadrzędnymi te pliki widoków - ale nie to co chcemy;)

w:

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

istnieje accessor dla generatora:

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

    return $this->generator; 
} 

Można spróbować zastąpić tę metodę w pakiecie rozszerzającym i ustawić inny $skeletonDir w konstruktorze.

Edit:

Krótki przykład w moim środowisku testowym, jak można to osiągnąć (I tylko wykonany szybki test;):

wygenerować nowy pakiet dla generatora niestandardowych: php app/console generate:bundle i wykonaj instrukcje. Trasa nie jest potrzebna. Wybrałem dla tego przykładu: Acme/CrudGeneratorBundle (lub użyj istniejącego pakietu)

Utwórz folder o nazwie "Command" w nowo utworzonym katalogu pakunków.

Umieść klasę poleceń w tym folderze.

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

Kopiowanie sprzedawca/pakiety/Sensio/Paczka/GeneratorBundle/Resources/skeleton/CRUD do zasobów (w moim przykładzie "src/Acme/CrudGeneratorBundle/Resources/crud")

+0

Zdecydowanie nie chcę robić szybkiego i brudnego hacka! Ale próbowałem zastąpić funkcję getGenerator i to nadal nie działa –

+1

Zaktualizowałem odpowiedź na przykładzie, jak to działa. Nadal - to jest hack. – madflow