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.

 133
Author: Cœur, 2012-02-21

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.

 207
Author: Rodney Folz,
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 }}

 147
Author: mrzmyr,
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.

 114
Author: Bártfai Tamás,
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 }}
 28
Author: Zaheer Babar,
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.

 17
Author: Chadwick Meyer,
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'))

 1
Author: Tim,
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