Pobierz aktualny adres url w szablonie gałązki?
Rozejrzałem się po kodzie, aby uzyskać bieżącą ścieżkę w szablonie gałązki (a nie Pełny URL), tzn.
Nie chcę http://www.sitename.com/page
, potrzebuję tylko /page
.
6 answers
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
Jeśli chcesz wczytać go do zmiennej view:
{% set currentPath = path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) %}
Zmienna widoku globalnego app
zawiera różnego rodzaju przydatne skróty, takie jak app.session
i app.security.token.user
, które odwołują się do usług, których możesz używać w kontrolerze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-14 00:05:10
Get current url: {{ app.request.uri }}
in Symfony 2.3, 3, 4
Get tylko ścieżka: {{ app.request.pathinfo }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-05 23:07:39
W symfony 2.1 możesz użyć tego:
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
W symfony 2.0 jednym z rozwiązań jest napisanie rozszerzenia gałązki dla tego
public function getFunctions()
{
return array(
'my_router_params' => new \Twig_Function_Method($this, 'routerParams'),
);
}
/**
* Emulating the symfony 2.1.x $request->attributes->get('_route_params') feature.
* Code based on PagerfantaBundle's twig extension.
*/
public function routerParams()
{
$router = $this->container->get('router');
$request = $this->container->get('request');
$routeName = $request->attributes->get('_route');
$routeParams = $request->query->all();
foreach ($router->getRouteCollection()->get($routeName)->compile()->getVariables() as $variable) {
$routeParams[$variable] = $request->attributes->get($variable);
}
return $routeParams;
}
I używaj w ten sposób
{{ path(app.request.attributes.get('_route'), my_router_params()|merge({'additional': 'value'}) }}
Nie będziesz potrzebował tego wszystkiego, chyba że chcesz dodać dodatkowe parametry do swoich linków, np. w pagerze, lub chcesz zmienić jeden z parametrów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-21 20:07:56
Możesz pobrać aktualny adres URL w gałązce w następujący sposób:
{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 18:21:56
Należy zauważyć, że jeśli masz dodatkowe parametry zapytania w swoim adresie URL, które są a nie częścią skonfigurowanej trasy, zaakceptowana odpowiedź nie będzie zawierać ich w bieżącym adresie URL (ścieżce).
Po co Ci dodatkowe parametry?Na przykład, jeśli masz stronę listy z rekordami, które mogą być filtrowane według słów kluczowych i strona ma paginację, najprawdopodobniej zmienne zapytania dla "słowa kluczowego" i "strony" nie będą w Twojej trasie. Ale w przód i w tył przyciski stronicowania, potrzebujesz pełnego bieżącego adresu URL (który zawiera słowa kluczowe, więc Następna strona jest nadal filtrowana). I musisz zmodyfikować zmienną strony.
Jak połączyć w dodatkowych parametrach zapytania
Więc można uzyskać bieżącą trasę i scalić w dodatkowych zmiennych(po modyfikacji jednej lub więcej z tych dodatkowych zmiennych). Zauważ, że we własnych zmiennych łączysz się z app.request.query.all
, a następnie łączysz tę tablicę z app.request.attributes.get('_route_params')
. Metoda path()
wymaga podania wszystkich wymagane parametry trasy, dlatego należy dołączyć _route_params
.
{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}
To jest naprawdę brzydkie, ale jeśli rozwijasz paginację, będziesz musiał zmodyfikować zmienną strony na każdym osobnym linku, więc za każdym razem musisz zawrzeć całość. Być może inni mają lepsze rozwiązanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 00:34:48
Jeśli używasz Silex 2, nie możesz uzyskać dostępu do obiektu Request.
W ten sposób można uzyskać dostęp do bieżących atrybutów żądania.
app.request_stack.currentrequest.attributes.get('_route')
I wygenerowanie pełnego bieżącego adresu URL :
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-29 07:54:18