Rozejrzałem się za kodem, aby uzyskać bieżącą ścieżkę w szablonie Twig (a nie pełny adres URL), tj. Nie chcę http://www.sitename.com/page, tylko potrzebuję /page.
NIE jest to dokładny duplikat, ponieważ odpowiedź nr 2 zawiera niezbędne informacje (o parametrach żądania), których nie zawiera połączone pytanie. Należy połączyć odpowiedź nr 2 z połączonym pytaniem.
Victor Sergienko
1
spróbuj app.request.requestUri.
Kristóf Dombi
7
Wcale nie naśladownictwo. Głosowanie za ponownym otwarciem. Publikowanie odpowiedzi jako komentarz, ponieważ nie mogę teraz odpowiedzieć ... {{ app.request.getBaseUrl ~ app.request.getPathInfo }}( getBaseUrlbit jest opcjonalny; potrzebny tylko, jeśli nie jest zainstalowany w katalogu głównym domeny)
appZmienna globalna widok zawiera wszystkie rodzaje przydatnych skrótów, jak app.sessioni app.security.token.user, które odwołują się do usługi można użyć w kontrolerze.
niestety to nie zadziała, jeśli masz trasę z obowiązkowymi parametrami.
Martin Schuhfuß
Jeśli używasz Twig bez Symfony, możesz zrobić coś takiego: $ twig-> addGlobal ("CurrentUrl", $ _SERVER ["REQUEST_URI"]);
GateKiller
1
Jeśli Twoja trasa ma obowiązkowe parametry, zobacz odpowiedź poniżej .
Sam
@GateKiller Spowodowało to niepowodzenie mojego testu funkcjonalnego:Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
To jedyny, który działał dla mnie. Wszyscy inni pominęli parametry zapytania, które nie były częścią trasy lub opierały się na kontrolerze, a nie na Twig.
Craig
13
Aby uzyskać ścieżkę, wypróbuj {{ app.request.pathinfo }}lub zobacz listę dostępnych metod w/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
Michael
2
To powinna być prawidłowa odpowiedź. Krótkie i gładkie.
Fabian Picone
2
uripobiera adres URL z parametrami. pathinfouzyskuje ścieżkę z NO parametrów. requestUripobiera ścieżkę z parametrami. requestUrinależy dodać do tej odpowiedzi IMO. Rzadko będziesz potrzebować domeny i rzadko będziesz chciał usunąć parametry.
Nie będziesz potrzebować tego wszystkiego, chyba że chcesz dodać dodatkowe parametry do swoich linków, na przykład na pagerze, lub chcesz zmienić jeden z parametrów.
Jeśli chcesz wygenerować bieżący link w Twig i zmienić locale do zmiany języka, możesz to zrobić w Symfony 2.1 w następujący sposób: {{path (app.request.attributes.get ('_ route'), app.request.attributes .get ('_ route_params') | merge ({'_ locale': 'ja'}))}} Może działać, jeśli użyjesz rozszerzenia Twig autorstwa Bártfai Tamása
Naytzyrhc
W przypadku Twojej implementacji 2.0 pojawia się błąd informujący, że nie ma kontenera. Więc dodałem zmienną, tak jak jest to zrobione w PagerfantaBundle, ale potem mówi, że muszę zaimplementować ContainerInterface?
Squazic
Musisz utworzyć konstruktora dla tego rozszerzenia, które ma parametr $ container. Następnie w konfiguracji DIC musisz zadeklarować kontener jako parametr rozszerzenia. Tak jak tutaj w TwigBundle
Bártfai Tamás
12
Parametry _route_parameters nie będą działać, jeśli w ciągu zapytania znajdują się dodatkowe parametry. Możesz zamiast tego użyć app.request.query.all.
wdev
34
Możesz pobrać aktualny adres URL w Twig w następujący sposób:
Należy zauważyć, że jeśli masz dodatkowe parametry zapytania w swoim adresie URL, które nie są częścią skonfigurowanej trasy, zaakceptowana odpowiedź nie będzie uwzględniać ich w bieżącym adresie URL (ścieżce).
Dlaczego chcesz mieć dodatkowe parametry?
Na przykład, jeśli masz stronę listy z rekordami, które można filtrować według słów kluczowych, a strona ma paginację, najprawdopodobniej zmienne zapytania dla „słowa kluczowego” i „strony” nie będą na Twojej trasie. Ale w przyciskach do przodu i do tyłu do stronicowania potrzebujesz pełnego bieżącego adresu URL (zawierającego słowa kluczowe, aby następna strona była nadal filtrowana). I musisz zmodyfikować zmienną strony.
Jak scalić dodatkowe parametry zapytania
Możesz więc pobrać aktualną trasę i połączyć dodatkowe zmienne (po zmodyfikowaniu jednej lub więcej z tych dodatkowych zmiennych). Zwróć uwagę, że scalasz swoje własne zmienne do app.request.query.all, a następnie scalasz tę tablicę do app.request.attributes.get('_route_params'). path()Metoda wymaga, aby podać wszystkie wymagane parametry trasy, dlatego trzeba zaliczyć _route_params.
To naprawdę brzydkie, ale jeśli rozwijasz paginację, będziesz musiał zmodyfikować zmienną strony w każdym oddzielnym linku, więc za każdym razem musisz uwzględniać całość. Być może inni mają lepsze rozwiązanie.
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
(getBaseUrl
bit jest opcjonalny; potrzebny tylko, jeśli nie jest zainstalowany w katalogu głównym domeny)Odpowiedzi:
Jeśli chcesz wczytać go do zmiennej widoku:
app
Zmienna globalna widok zawiera wszystkie rodzaje przydatnych skrótów, jakapp.session
iapp.security.token.user
, które odwołują się do usługi można użyć w kontrolerze.źródło
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
Pobierz aktualny adres URL :
{{ app.request.uri }}
w Symfony 2.3, 3, 4, 5Pobierz tylko ścieżkę :
{{ app.request.pathinfo }}
(bez parametrów)Uzyskaj identyfikator żądania uri :
{{ app.request.requesturi }}
(z parametrami)źródło
{{ app.request.pathinfo }}
lub zobacz listę dostępnych metod w/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
uri
pobiera adres URL z parametrami.pathinfo
uzyskuje ścieżkę z NO parametrów.requestUri
pobiera ścieżkę z parametrami.requestUri
należy dodać do tej odpowiedzi IMO. Rzadko będziesz potrzebować domeny i rzadko będziesz chciał usunąć parametry.W symfony 2.1 możesz użyć tego:
W symfony 2.0 jednym z rozwiązań jest napisanie do tego rozszerzenia twig
I używaj w ten sposób
Nie będziesz potrzebować tego wszystkiego, chyba że chcesz dodać dodatkowe parametry do swoich linków, na przykład na pagerze, lub chcesz zmienić jeden z parametrów.
źródło
Możesz pobrać aktualny adres URL w Twig w następujący sposób:
źródło
Należy zauważyć, że jeśli masz dodatkowe parametry zapytania w swoim adresie URL, które nie są częścią skonfigurowanej trasy, zaakceptowana odpowiedź nie będzie uwzględniać ich w bieżącym adresie URL (ścieżce).
Dlaczego chcesz mieć dodatkowe parametry?
Na przykład, jeśli masz stronę listy z rekordami, które można filtrować według słów kluczowych, a strona ma paginację, najprawdopodobniej zmienne zapytania dla „słowa kluczowego” i „strony” nie będą na Twojej trasie. Ale w przyciskach do przodu i do tyłu do stronicowania potrzebujesz pełnego bieżącego adresu URL (zawierającego słowa kluczowe, aby następna strona była nadal filtrowana). I musisz zmodyfikować zmienną strony.
Jak scalić dodatkowe parametry zapytania
Możesz więc pobrać aktualną trasę i połączyć dodatkowe zmienne (po zmodyfikowaniu jednej lub więcej z tych dodatkowych zmiennych). Zwróć uwagę, że scalasz swoje własne zmienne do
app.request.query.all
, a następnie scalasz tę tablicę doapp.request.attributes.get('_route_params')
.path()
Metoda wymaga, aby podać wszystkie wymagane parametry trasy, dlatego trzeba zaliczyć_route_params
.{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}
To naprawdę brzydkie, ale jeśli rozwijasz paginację, będziesz musiał zmodyfikować zmienną strony w każdym oddzielnym linku, więc za każdym razem musisz uwzględniać całość. Być może inni mają lepsze rozwiązanie.
źródło
{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
Jeśli używasz Silex 2, nie możesz już uzyskać dostępu do obiektu Request.
W ten sposób możesz uzyskać dostęp do atrybutów bieżącego żądania.
Aby wygenerować pełny aktualny adres URL:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
źródło
global.request.attributes.get('_route')
. Wymagany jest mostek Twig .