25 Stimmen

Routing in Symfony2

Wie richtet man das Standard-Routing in Symfony2 ein?

In Symfony1 sah es ungefähr so aus:

homepage:
  url:   /
  param: { module: default, action: index }

default_symfony:
  url:   /symfony/:action/...
  param: { module: default }

default_index:
  url:   /:module
  param: { action: index }

default:
  url:   /:module/:action/...

28voto

Longsight Punkte 706

Ich habe im Kochbuch nach einer Antwort gesucht und glaube, sie hier gefunden zu haben. Standardmäßig haben alle Routenparameter das versteckte Erfordernis, dass sie mit jedem Zeichen außer dem / Zeichen übereinstimmen müssen ([^/]+), aber dieses Verhalten kann mit dem Anforderungs-Schlüsselwort außer Kraft gesetzt werden, indem er erzwungen wird, mit beliebigem Zeichen übereinzustimmen.

Das folgende sollte eine Standardroute erstellen, die alle anderen erfasst - und als solche sollte sie als letzte in Ihrer Routenkonfiguration stehen, da darauf folgende Routen niemals übereinstimmen werden. Um sicherzustellen, dass es auch "/" erfasst, ist ein Standardwert für den URL-Parameter enthalten.

default_route:
    pattern: /{url}
    defaults: { _controller: AcmeBundle:Default:index, url: "index" }
    requirements:
        url: ".+"

0 Stimmen

Hat funktioniert, danke aber nur zur Verbesserung: „Default“ ist der Klassenname Ihres Controllers (erster Buchstabe großgeschrieben ohne den Teil „Controller“).

0 Stimmen

Es besteht ein Problem mit dem im Antwort präsentierten Code, es fehlt ein Routenname. Derzeit wird angenommen, dass pattern: der Routenname ist und pattern:, defaults: und requirements: auf derselben Ebene eingerückt werden müssen.

0 Stimmen

Danke, das war wahrscheinlich ein überhasteter Kopier- und Einfügevorgang aus meiner Routendatei!

8voto

dxb Punkte 921

Ich glaube nicht, dass es mit dem Standard-Routing-Komponenten möglich ist. Schau dir dieses Bundle an, das könnte helfen: https://github.com/hidenorigoto/DefaultRouteBundle

1 Stimmen

Eine weitere Möglichkeit besteht darin, es mit Annotationen bundles.symfony-reloaded.org/frameworkextrabundle/… zu tun. Immer noch keine Standardroute.

0 Stimmen

Nein, das ist möglich. Siehe die Antwort unten.

8voto

Denis Gorbachev Punkte 497

// Symfony2 PR10

in routing.yml:

default:
    pattern:  /{_controller}

Es ermöglicht Ihnen, diese Art von URLs zu verwenden: http://localhost/MySuperBundle:MyController:myview

4voto

mevdschee Punkte 1544

Das Symfony2 Standard-Routing-Komponente unterstützt dies nicht, aber dieses Bundle schließt die Lücke, die Symfony1 hinterlassen hat:

https://github.com/LeaseWeb/LswDefaultRoutingBundle

Es macht, was Sie erwarten. Sie können ein Bundle standardmäßig routen, indem Sie diese Syntax verwenden:

FosUserBundle:
  resource: "@FosUserBundle"
  prefix:   /
  type:     default

Es scannt Ihr Bundle und fügt automatisch Routen zu Ihrer Router-Tabelle hinzu, die Sie durch Ausführen von debuggen können:

app/console router:debug

Beispiel für automatisch hinzugefügte Standardrouten:

[router] Aktuelle Routen
Name                          Methode Pattern
fos_user.user.login_check     ANY    /user/login_check.{_format}
fos_user.user.logout          ANY    /user/logout.{_format}
fos_user.user.login           ANY    /user/login.{_format}
...

Sie sehen, dass es auch die automatische "Format"-Auswahl unterstützt, indem Sie eine Dateierweiterung (html, json oder xml) verwenden.

3voto

Crozin Punkte 42878

Hier ist ein Beispiel: http://docs.symfony-reloaded.org/master/quick_tour/the_big_picture.html#routing

Eine Routendefinition hat nur einen obligatorischen Parameter Muster und drei optionale Parameter Standard, Anforderungen und Optionen.

Hier ist eine Route aus meinem eigenen Projekt:

video:
    pattern:  /watch/{id}/{slug}
    defaults: { _controller: SiteBundle:Video:watch }
    requirements: { id: "\d+", slug: "[\w-]+"

1 Stimmen

Ich weiß, wie ich Parameter zu meiner Route hinzufügen kann. Aber ich möchte den Controller und die Aktion so abgleichen, dass Routen wie /controller/aktion/parameter... haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X