web-dev-qa-db-ger.com

Symfony2 - Aktuelle URL oder Route in TWIG-Vorlage abrufen?

Meine Route ist

admin:
      path:     /admin/
      defaults: { _controller: CatalogWebBundle:Admin:admin }

Wie kann ich den Routennamen in der Vorlage PHP ermitteln?

9
Wizard

Um die aktuelle URL abzurufen

$request->getRequestUri(); oder app.request.uri

Für die Route selbst empfiehlt es sich, sie als Parameter in Ihre Steuerung einzufügen, siehe das Dokument hier . Sie könnten $request->attributes->get('_route') oder app.request.attributes.get('_route') verwenden, aber es ist nicht so zuverlässig, zum Beispiel funktioniert nicht mit Weiterleitungen , wenn Sie an einen Controller weiterleiten, nicht an einen Pfad. Und es ist wirklich nur für Debugging-Zwecke laut Fabien (@fabpot), dem Ersteller , daher würde ich mich bei zukünftigen Upgrades nicht darauf verlassen.

Sidenote

Denken Sie daran, vermeiden Sie $request->get() wann immer Sie können, also keine $request->get('_route'), wie ich in einigen Antworten auf ähnliche Fragen gesehen habe

Wenn Sie die Flexibilität bei Steuerungen nicht benötigen, sollten Sie stattdessen Explizit Anforderungsparameter von der entsprechenden öffentlichen Eigenschaft Abrufen (Attribute, Abfrage, Anforderung).

Der Grund dafür ist, dass die öffentlichen Eigenschaften (Attribute, Abfrage und Anforderung) anstelle von nur den Eigenschaften (Attributen) angezeigt werden, wodurch sie viel langsamer werden

14
Tom Toms

Es ist nicht gut, direkt in Twig zu tun, aber Sie können es trotzdem tun. Der bessere Weg ist, es vom Controller als Argument zu übergeben.

Routenparameter in Twig abrufen.

{{ app.request.attributes.get('_route_params') }}

UND

Erhält den gesamten Paketnamen in Twig.

{{ app.request.attributes.get("_controller") }}

Ermitteln Sie den Namen der Route in Twig.

{{ app.request.attributes.get('_route') }}
5
BentCoder

Um den Routennamen in Symfony2 zu erhalten, geben Sie den folgenden Code-Ausschnitt ein

$request = $this->container->get('request');
$routeName = $request->get('_route');

Um die URL in Symfony2 zu erhalten,

$request = $this->container->get('request');
$routeURL = $request->getRequestUri();
1
kisanme

In einigen Fällen wird app.request.uri die URL der aktuellen Seite nicht zurückgeben.

Beispiel: In Ihrer Seitenvorlage rufen Sie einen Controller an über: 

{{ render(controller('AppBundle:MyController:myBlock')) }}

In myBlockAction rendern Sie eine weitere Vorlage, beispielsweise block.html.twig.

Ein Aufruf von app.request.uri von block.html.twig wird etwa Folgendes anzeigen: 

http://www.example.com/app.php/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DAppBundle%253AMyController%253AmyBlock

Wenn Sie die absolute URL der gerenderten Seite aus block.html.twig abrufen möchten, können Sie sie aus den PHP $ _SERVER-Variablen zusammenstellen:

{{ app.request.server.get('REQUEST_SCHEME') ~ '://' ~ 
   app.request.server.get('SERVER_NAME') ~ 
   app.request.server.get('PHP_SELF') }}

Sie können bei Bedarf auch QUERY_STRING hinzufügen. 

0
scandel