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/...

2voto

ken Punkte 4416

Alternativ können Sie die @Route-Annotation direkt in einer Controller-Datei verwenden. Siehe https://github.com/sensio/SensioFrameworkExtraBundle/blob/master/Resources/doc/annotations/routing.rst

Was die Standardrouten betrifft, glaube ich, dass Symfony2 eine explizite Routenzuordnung fördert.

0 Stimmen

Ich denke, was seltsam ist, ist, dass wenn du dein Bundle mit den Konsolentools generierst, es einen Standardcontroller mit Routen, die über Annotations definiert sind, erstellt. Aber im offiziellen Buch wird keine Erwähnung von Routen über Annotations gemacht - es gibt keine Erwähnung im Buch. Wenn dies die Standardkonfiguration ist, sollte meines Erachtens darauf hingewiesen werden und es sollten Dokumentationen (oder Links dazu) bereitgestellt werden.

2voto

Das Erstellen einer Standardroute ist kein guter Programmieransatz. Warum? Weil aus diesem Grund die Ausnahme implementiert wurde. Symfony2 ist nur dafür gebaut, die richtigen Dinge auf die richtige Weise zu tun.

Wenn Sie alle "nicht gefunden" Routen umleiten möchten, sollten Sie eine Ausnahme verwenden, wie NotFound404 oder etwas Ähnliches. Sie können diese Seite sogar nach Ihren eigenen Wünschen anpassen.

Eine Route hat immer einen bestimmten Zweck. Alles andere ist schlecht.

2 Stimmen

BASTA''s Kommentar: "@Marc Morera Merino: Betrachten Sie dieses Nutzungsszenario - ein Blog mit Standardansicht, Einzelbeitragsansicht, Gästebuch, Gästebucheintragsformular usw. Für die Standardansicht möchte ich nicht, dass die URL in der Form http://example.com/blog/slug ist, sondern einfach http://example.com/slug. Dies wird die Standardansicht der Website sein und sicherlich nichts, was als 'Ausnahme' angesehen werden kann."

0 Stimmen

Auch ist es völlig vernünftig, dass Ihr JS die Routensteuerung übernimmt und die Anwendungsansicht dynamisch lädt. In diesem Fall würden alle Routen ein Basislayout bedienen und Ihr JS-Router würde die URL bestimmen und die Ansicht rendern. Dies erfordert eine allumfassende Route.

0 Stimmen

Marc, ich denke, du hast noch nichts von SEO gehört, das Ändern von Routen ist manchmal notwendig, wenn eine Website umstrukturiert wird und ein Catch-All erforderlich sein könnte, um eine korrekte Weiterleitung (301 Status) zu ermöglichen.

1voto

MFoster Punkte 11

Sie könnten Ihr eigenes Bundle erstellen, das alle Anfragen behandelt und URL-Parameter verwendet, um einen String zu erstellen, der an die forward-Methode des Controllers übergeben wird. Aber das ist ziemlich schrecklich, ich würde gut definierte Routen verwenden, das hält Ihre URLs sauber und entkoppelt die URL- und Controller-Namen. Wenn Sie ein Bundle oder etwas umbenennen, müssen Sie dann Ihre URLs neu gestalten?

1voto

D H Punkte 11

Wenn Sie ein "Catch All" erstellen möchten, ist es am besten, sich am KernelEvents::EXCEPTION Ereignis zu haken. Dieses Ereignis wird ausgelöst, wenn eine Ausnahme an den HttpKernel durchrutscht, das schließt die NotFoundHttpException ein, die geworfen wird, wenn der Router keine Route zu einem Controller auflösen kann.

Der Effekt wäre ähnlich wie die stilisierte 404-Seite von Symfony, die gerendert wird, wenn Sie die Anfrage über app_dev.php senden. Anstatt eine 404 zurückzugeben, führen Sie die gewünschte Logik aus.

0voto

luminol Punkte 409

Es kommt darauf an... Einige meiner sehen so aus:

api_email:
resource: "@MApiBundle/Resources/config/routing_email.yml"
prefix: /

und einige sehen so aus

api_images:
path:     /images/{listingId}/{width}/{fileName}
defaults: { _controller: ApiBundle:Image:view, listingId: null, width: null, fileName: null }
methods:  [GET]
requirements:
    fileName: .+

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