2012-03-26 8 views
1

Ich benutze Symfony schon lange, aber ich bin neu in Symfony2. Nach der Verwendung für ein Modul des CRUD Generators Gerüst zu erzeugen MediaArea genannt, ich meinen Routing enthalten diese Regel bearbeitet:Erstellen von Routen auf DRY-Art in Symfony2

_welcome: 
    pattern:/
    defaults: { _controller: VNNPressboxBundle:MediaArea:new } 

Wenn ich die Seite im Browser besucht, habe ich diesen Fehler:

An exception has been thrown during the rendering of a template ("Route "mediaarea_create" does not exist.")

Wenn ich die Route erstelle, verschwindet natürlich der Fehler. Hier ist die Route:

mediaarea_create: 
    pattern: /foo 
    defaults: { _controller: VNNPressboxBundle:MediaArea:create } 

So konnte ich manuell alle Routen erstellen Ich muss - mediaarea_create, mediaarea_index usw. - aber das wäre dumm. Gibt es eine Möglichkeit, Symfony mitzuteilen, dass ich alle diese mediaarea Routen habe, die ich arbeiten muss?

+0

Versuchen Sie, die vom CRUD-Generator generierten und in Ihrem Bundle enthaltenen Routen an die main app routing.yml-Datei anzuhängen? Oder versuchen Sie, Symfony dazu zu bringen, die Crud-Routen automatisch anzunehmen? – Shattuck

+0

Um Ihre erste Frage zu beantworten, kann ich keinen Hinweis darauf finden, dass der CRUD-Generator überhaupt Routen generiert hat. Wenn es so ist, ist es mir egal, wo sie sich aufhalten, solange sie funktionieren. Für Ihre zweite Frage wäre es schön, wenn es das tun würde, aber mein Hauptziel ist es, in diesem Fall den "richtigen" Weg zu finden, mit dem Routing umzugehen. –

+0

Ich würde Ihren src/{namespaceName}/{bundleName}/Resources/config-Ordner für alle generierten Routen einchecken. Wenn nichts vorhanden ist, müssen Sie die Routen wahrscheinlich manuell erstellen. Es gibt eine Möglichkeit Symfony automatisch zu erstellen. Ich bin nicht 100% sicher, wie das geht, ohne den FOSRestBundle zu benutzen: https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Routing/Loader/RestRouteLoader.php, aber Sie könnten sich ihr Bundle ansehen Sieh, wie sie es gemacht haben. – Shattuck

Antwort

1

EDIT: ok, kann die Frage nicht beantworten, es ist nur ein langer Kommentar ...

Warum nicht einen abstractBasis-Controller mit Anmerkungen stattdessen verwenden?

abstract class AbstractCrudController extends Controller 
{ 

    /** 
    * @Route("/show/{slug}") 
    * @Method("GET") 
    * @Template 
    */ 
    public function showAction($slug) { /* Do stuff */ } 
} 

class MediaController extends AbstractCrudController { } 
class UserController extends AbstractCrudController { } 

Wenn Ihr Subklassen ein anderes Verhalten benötigen Sie immer außer Kraft setzen können showAction() oder hinzufügen jede Aktion Sie wollen. Dann brauchen Sie nur (für jeden Controller nur einen Import) MediaController und UserController in Ihrem routing.yml zu importieren:

somename1: 
    resource: "@AcmeHelloBundle/Controller/MediaController.php" 
    type: annotation 
    prefix: /media 

somename2: 
    resource: "@AcmeHelloBundle/Controller/UserController.php" 
    type: annotation 
    prefix: /user 

Ihre Routen dann automatisch acme_hello_media_show und acme_hello_user_show werden. Debuggen mit:

php app/console router:debug 
Verwandte Themen