Digitalagentur für Business Software aus Kiel

Routes in Symfony2 mit Prefix optimal organisieren!

Veröffentlicht von Patrick Rathje am 17.06.2015

Patrick Rathje

Wir zeigen Ihnen, wie Sie mit einer besseren Struktur der Routen zu effizienteren Ergebnissen kommen.

Routen sind ein wichtiger Bestandteil eines jeden Projektes. Ihre Anzahl wächst mit der Projektgröße kontinuierlich, sodass der Überblick verloren gehen kann.
Umso wichtiger ist es daher, seine Routen zu strukturieren: Wir wollen Ihnen zeigen, wie einfach dies sein kann.

Routen aus Bundles importieren

Zunächst sollten nicht globale Routen in die zugehörigen Bundles (z.B. "BrauneDigital/DemoBundle/Resources/config/routing.yml") eingetragen werden und dann in das globale Routing ("app/config/routing.yml") importiert werden.

Dies ist dank Symfonys Möglichkeit zum Import ganzer Routing-Dateien sehr einfach:

bd_demo:
    resource: '@BrauneDigitalDemoBundle/Resources/config/routing.yml'
app/config/routing.yml

Dabei können alternativ auch Annotationen aus den Controllern importiert werden:

bd_demo:
    resource: "@BrauneDigitalDemoBundle/Controller/"
    type: annotation
app/config/routing.yml

Routen mit Prefix

Zusätzlich zum eigentlichen Import kann ein Prefix-Pfad angegeben werden; dieser wird vor alle zu importierenden Routen hängt:

bd_demo:
    resource: '@BrauneDigitalDemoBundle/Resources/config/routing.yml'
    prefix: /demo
app/config/routing.yml

Parametrisierte Routen

Der Prefix-Pfad kann darüber hinaus genutzt werden um bestimmte Parameter einer Route bzw. einer Routing-Datei festzulegen.
Für die Organisation von lokalisierten Routen ist dies besonders praktisch: So können alle sprachabhängigen Routen in einer eigenen Datei zusammengefasst und ihnen damit der entsprechende Sprach-Prefix vorgehängt werden:

bd_demo_localized:
    resource: '@BrauneDigitalDemoBundle/Resources/config/routing_localized.yml'
    prefix: /{_locale}/
    defaults: { _locale: de}
    requirements: { _locale: en|de }
app/config/routing_localized.yml

In diesem Fall sind alle Routen aus dem BrauneDigitalDemoBundle nun nur noch über die lokalisierte Variante zu erreichen. Also entweder: "/en/route" oder "/de/route" statt nur "/route".
Dabei legt der Parameter '_locale' die Sprache für z.B. den Controller fest.

Analog zum lokalisierten Routing können natürlich auch andere Prefixe vergeben werden.

Abgrenzung der lokalisierten Routen

Um sein Routing noch weiter zu strukturieren, können in den einzelnen Bundles z.B. 'routing_localized.yml' Dateien erstellt und diese dann ähnlich dem normalen Routing wieder global importiert werden:

routing_localized:
    resource: 'routing_localized.yml'
    prefix: /{_locale}/
    defaults: { _locale: de}
    requirements: { _locale: en|de }
app/config/routing.yml
bd_demo_localized:
    resource: '@BrauneDigitalDemoBundle/Resources/config/routing_localized.yml'
    prefix: /user
app/config/routing_localized.yml

Flexiblere Lokalisierung:

Für den Fall, dass man in einem Bundle z.B. nicht alle Sprachen unterstützt, oder mehr Freiheit haben möchte, kann der import der Bundle-spezifischen "routing_localized.yml" auch analog in der Bundle routing.yml geschehen:

bd_demo:
    resource: '@BrauneDigitalDemoBundle/Resources/config/routing.yml'
    prefix: /user
app/config/routing.yml
bd_demo_localized:
    resource: 'routing_localized.yml'
    prefix: /{_locale}/
    defaults: { _locale: fr}
    requirements: { _locale: fr|de }
BrauneDigital/DemoBundle/Resources/config/routing.yml

© 2020, Braune Digital GmbH, Niemannsweg 69, 24105 Kiel, +49 (0) 431 55 68 63 59