Ich habe mich nach dem Code umgesehen, um den aktuellen Pfad in einer Twig-Vorlage (und nicht die vollständige URL) zu erhalten, dh ich möchte nicht http://www.sitename.com/page, ich brauche nur /page.
Dies ist KEIN genaues Duplikat, da Antwort 2 die erforderlichen Informationen (zu Anforderungsparametern) enthält, die die verknüpfte Frage nicht enthält. Man sollte die Antwort Nr. 2 in die verknüpfte Frage einfügen.
Victor Sergienko
1
Versuchen Sie es mit app.request.requestUri.
Kristóf Dombi
7
Überhaupt kein Betrüger. Abstimmung zur Wiedereröffnung. Poste meine Antwort als Kommentar, weil ich jetzt nicht antworten darf ... {{ app.request.getBaseUrl ~ app.request.getPathInfo }}( getBaseUrlBit ist optional; wird nur benötigt, wenn es nicht im Stammverzeichnis der Domain installiert ist)
Die appglobale Ansichtsvariable enthält alle möglichen nützlichen Verknüpfungen, z. B. app.sessionund app.security.token.user, die auf die Dienste verweisen, die Sie möglicherweise in einem Controller verwenden.
Dies ist der einzige, der für mich gearbeitet hat. Alle anderen haben Abfrageparameter verpasst, die nicht Teil der Route waren oder sich auf den Controller und nicht auf Twig stützten.
Craig
13
Um den Pfad nur zu erhalten, versuchen {{ app.request.pathinfo }}Sie, eine Liste der verfügbaren Methoden in/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
Michael
2
Dies sollte die richtige Antwort sein. Kurz und glatt.
Fabian Picone
2
uriRuft die URL mit Parametern ab. pathinfowird der Pfad mit NO - Parameter. requestUriRuft den Pfad mit Parametern. requestUrisollte zu dieser Antwort IMO hinzugefügt werden. Sie benötigen die Domain selten und möchten die Parameter selten entfernen.
Sie benötigen dies alles nur, wenn Sie Ihren Links zusätzliche Parameter hinzufügen möchten, z. B. in einem Pager, oder wenn Sie einen der Parameter ändern möchten.
Wenn Sie den aktuellen Link in Twig generieren und das Gebietsschema für den Sprachwechsel ändern möchten, können Sie dies in Symfony 2.1 wie folgt tun: {{path (app.request.attributes.get ('_ route'), app.request.attributes .get ('_ route_params') | merge ({'_ locale': 'ja'}))}} Es kann funktionieren, wenn Sie die Twig-Erweiterung von Bártfai Tamás
Naytzyrhc verwenden
Bei Ihrer 2.0-Implementierung wird die Fehlermeldung angezeigt, dass kein Container vorhanden ist. Also habe ich die Variable hinzugefügt, wie es in PagerfantaBundle gemacht wird, aber dann heißt es, dass ich das ContainerInterface implementieren muss?
Squazic
Sie müssen einen Konstruktor für diese Erweiterung erstellen, der einen $ container-Parameter enthält. Dann müssen Sie in der DIC-Konfiguration den Container als Parameter für die Erweiterung deklarieren. Wie hier im TwigBundle
Bártfai Tamás
12
Die _route_parameters funktionieren nicht, wenn Ihre Abfragezeichenfolge einige zusätzliche Parameter enthält. Sie können stattdessen app.request.query.all verwenden.
wdev
34
Sie können die aktuelle URL in Twig folgendermaßen abrufen:
Es sollte beachtet werden, dass wenn Sie zusätzliche Abfrageparameter in Ihrer URL haben, diese nicht sind Teil der konfigurierten Route sind, die akzeptierte Antwort diese nicht in die aktuelle URL (Pfad) einbezieht.
Warum sollten Sie zusätzliche Parameter wünschen?
Wenn Sie beispielsweise eine Listenseite mit Datensätzen haben, die nach Schlüsselwörtern gefiltert werden können, und die Seite eine Paginierung aufweist, befinden sich die Abfragevariablen für "Schlüsselwort" und "Seite" höchstwahrscheinlich nicht in Ihrer Route. In Ihren Vorwärts- und Rückwärtsschaltflächen zum Blättern benötigen Sie jedoch die vollständige aktuelle URL (die die Schlüsselwörter enthält, damit die nächste Seite weiterhin gefiltert wird). Und Sie müssen die Seitenvariable ändern.
Zusammenführen zusätzlicher Abfrageparameter
So können Sie die aktuelle Route abrufen und die zusätzlichen Variablen zusammenführen (nachdem Sie eine oder mehrere dieser zusätzlichen Variablen geändert haben). Beachten Sie, dass Sie Ihre eigenen Variablen mit dem zusammenführen app.request.query.allund dieses Array dann mit dem zusammenführen app.request.attributes.get('_route_params'). Die path()Methode erfordert, dass Sie alle erforderlichen Parameter der Route angeben, weshalb Sie die einschließen müssen _route_params.
Das ist wirklich hässlich, aber wenn Sie eine Paginierung entwickeln, müssen Sie die Seitenvariable in jedem einzelnen Link ändern, sodass Sie jedes Mal das Ganze einfügen müssen. Vielleicht haben andere eine bessere Lösung.
Und um die vollständige aktuelle URL zu generieren:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
(getBaseUrl
Bit ist optional; wird nur benötigt, wenn es nicht im Stammverzeichnis der Domain installiert ist)Antworten:
Wenn Sie es in eine Ansichtsvariable einlesen möchten:
Die
app
globale Ansichtsvariable enthält alle möglichen nützlichen Verknüpfungen, z. B.app.session
undapp.security.token.user
, die auf die Dienste verweisen, die Sie möglicherweise in einem Controller verwenden.quelle
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
Erhalten Sie aktuelle URL :
{{ app.request.uri }}
in Symfony 2.3, 3, 4, 5Erhalten Sie Pfad nur :
{{ app.request.pathinfo }}
(ohne Parameter)Get request uri :
{{ app.request.requesturi }}
(mit Parametern)quelle
{{ app.request.pathinfo }}
Sie, eine Liste der verfügbaren Methoden in/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
uri
Ruft die URL mit Parametern ab.pathinfo
wird der Pfad mit NO - Parameter.requestUri
Ruft den Pfad mit Parametern.requestUri
sollte zu dieser Antwort IMO hinzugefügt werden. Sie benötigen die Domain selten und möchten die Parameter selten entfernen.In Symfony 2.1 können Sie Folgendes verwenden:
In Symfony 2.0 besteht eine Lösung darin, eine Zweigerweiterung dafür zu schreiben
Und so verwenden
Sie benötigen dies alles nur, wenn Sie Ihren Links zusätzliche Parameter hinzufügen möchten, z. B. in einem Pager, oder wenn Sie einen der Parameter ändern möchten.
quelle
Sie können die aktuelle URL in Twig folgendermaßen abrufen:
quelle
Es sollte beachtet werden, dass wenn Sie zusätzliche Abfrageparameter in Ihrer URL haben, diese nicht sind Teil der konfigurierten Route sind, die akzeptierte Antwort diese nicht in die aktuelle URL (Pfad) einbezieht.
Warum sollten Sie zusätzliche Parameter wünschen?
Wenn Sie beispielsweise eine Listenseite mit Datensätzen haben, die nach Schlüsselwörtern gefiltert werden können, und die Seite eine Paginierung aufweist, befinden sich die Abfragevariablen für "Schlüsselwort" und "Seite" höchstwahrscheinlich nicht in Ihrer Route. In Ihren Vorwärts- und Rückwärtsschaltflächen zum Blättern benötigen Sie jedoch die vollständige aktuelle URL (die die Schlüsselwörter enthält, damit die nächste Seite weiterhin gefiltert wird). Und Sie müssen die Seitenvariable ändern.
Zusammenführen zusätzlicher Abfrageparameter
So können Sie die aktuelle Route abrufen und die zusätzlichen Variablen zusammenführen (nachdem Sie eine oder mehrere dieser zusätzlichen Variablen geändert haben). Beachten Sie, dass Sie Ihre eigenen Variablen mit dem zusammenführen
app.request.query.all
und dieses Array dann mit dem zusammenführenapp.request.attributes.get('_route_params')
. Diepath()
Methode erfordert, dass Sie alle erforderlichen Parameter der Route angeben, weshalb Sie die einschließen müssen_route_params
.{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}
Das ist wirklich hässlich, aber wenn Sie eine Paginierung entwickeln, müssen Sie die Seitenvariable in jedem einzelnen Link ändern, sodass Sie jedes Mal das Ganze einfügen müssen. Vielleicht haben andere eine bessere Lösung.
quelle
{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
Wenn Sie Silex 2 verwenden, können Sie nicht mehr auf das Request-Objekt zugreifen.
Auf diese Weise können Sie auf die aktuellen Anforderungsattribute zugreifen.
Und um die vollständige aktuelle URL zu generieren:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
quelle
global.request.attributes.get('_route')
. Zweigbrücke ist erforderlich.