2012-03-29 8 views
2

Ich habe ein BaseBundle, das ich erweitern muss, um eine kleine Anzahl von Vorlagen und eventuell Controller-Funktionen zu überschreiben. Ich verwende Annotationen, daher verweist app/config/routing.yml auf "@ BaseBundle/Controller /".Wie sollten Symfony2-Bundles, die mit Anmerkungen versehene Controller verwenden, erweitert werden?

Wenn ich CustomBundle, die BaseBundle erweitert erweitern routing.yml einfach CustomBundle leeren Controller-Ordner. Gibt es eine Möglichkeit, dieses Verhalten anders als das Erstellen von Klassen zu ändern, um einen einzelnen Controller in BaseBundle zu überschreiben, auch wenn ich nichts ändern möchte?

UPDATE: Die Erweiterung von BaseBundle hat auch das zusätzliche Problem, alle @Template() - Annotationen zu unterbrechen. Wenn ich einen leeren Controller erstelle, der die Controller von BaseBundle erweitert, beschwert er sich darüber, dass er die nicht vorhandene CustomBundle: Default: index.html.twig-Vorlage nicht finden kann.

Antwort

1

Ich hatte das gleiche Problem und festgestellt, dass durch nicht Änderung der Hauptbündel Datei (AcmeCustomBundle.php) als die Dokumentation vorschlagen, das Problem behoben.

also nicht verwenden:

public function getParent() 
    { 
     return 'AcmeBaseBundle'; 
    }) 

in meinem CustomBundle Standard-Controller ich habe:

use Acme\BaseBundle\Controller\DefaultController as BaseDefaultController; 
class DefaultController extends BaseDefaultController 

In meinem BaseBundle Controller hatte ich alle meine @Template() definieren Annotationen explizit als @ Vorlage ("AcmeBaseBundle: Default: index.html.twig") usw. und dann beim Überschreiben bestimmter Controller-Aktionen entweder @Template() in den CustomBundle-Controller-Aktionen verwenden, um die CustomeBundle-Vorlage zu verwenden, oder die BaseBundle-Vorlage explizit angeben möchte das t übersteuern nachzuahmen. Für jede Aktion, die Sie nicht überschreiben möchten, lassen Sie sie einfach aus dem CustomBundle-Controller heraus und der BaseBundle-Controller wird verwendet.

+0

eigentlich http://stackoverflow.com/questions/9373433/symfony2-bundle-inheritance-losing-parent-bundles-routes scheint die Frage besser zu beantworten. Die Verwendung des absoluten Pfads zum BaseBundle-Controller-Ordner schien auch mit der Funktion getParent zu funktionieren, und dann können Sie Vorlagen einfacher überschreiben, ohne die Controller-Aktion ebenfalls außer Kraft setzen zu müssen. Ich musste die Templates allerdings noch explizit in den Basis-Bundle-Controllern angeben. –