получить текущий URL в шаблоне ветки? - PullRequest
145 голосов
/ 21 февраля 2012

Я искал код для получения текущего пути в шаблоне Twig (а не полный URL), т.е. я не хочу http://www.sitename.com/page, мне нужен только /page.

Ответы [ 6 ]

227 голосов
/ 21 февраля 2012
{{ path(app.request.attributes.get('_route'),
     app.request.attributes.get('_route_params')) }}

Если вы хотите прочитать его в переменную представления:

{% set currentPath = path(app.request.attributes.get('_route'),
                       app.request.attributes.get('_route_params')) %}

Глобальная переменная представления app содержит все виды полезных ярлыков, таких как app.session и app.security.token.user,которые ссылаются на сервисы, которые вы можете использовать в контроллере.

174 голосов
/ 02 декабря 2013

Получить текущий URL : {{ app.request.uri }} в Symfony 2.3, 3, 4


Получить только путь : {{ app.request.pathinfo }}

114 голосов
/ 21 февраля 2012

В Symfony 2.1 вы можете использовать это:

{{ path(app.request.attributes.get('_route'), 
        app.request.attributes.get('_route_params')) }}

В symfony 2.0 одним из решений является написание расширения ветки для этого

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;
}

И используйте вот так

{{ path(app.request.attributes.get('_route'), my_router_params()|merge({'additional': 'value'}) }}

Все это вам не понадобится, если вы не хотите добавлять дополнительные параметры в свои ссылки, как в пейджере, или хотите изменить один из параметров.

33 голосов
/ 31 декабря 2014

Вы можете получить текущий URL в Twig следующим образом:

{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
18 голосов
/ 13 ноября 2014

Следует отметить, что если в вашем URL есть дополнительные параметры запроса, которые не являются частью настроенного маршрута, то принятый ответ не будет включать их в текущий URL (путь).

Зачем вам нужны дополнительные параметры?

Например, если у вас есть страница списка с записями, которые могут быть отфильтрованы по ключевому слову, а страница имеет нумерацию страниц, скорее всего, переменные запроса для "ключевого слова""и" страница "не будет в вашем маршруте.Но в ваших кнопках «вперед» и «назад» для подкачки вам нужен полный текущий URL (который содержит ключевые слова, поэтому следующая страница по-прежнему фильтруется).И вам нужно изменить переменную страницы.

Как объединить дополнительные параметры запроса

Таким образом, вы можете получить текущий маршрут и объединить дополнительные переменные (после изменения одной или нескольких из них).дополнительные переменные).Обратите внимание, что вы объединяете свои собственные переменные с app.request.query.all, а затем объединяете этот массив с app.request.attributes.get('_route_params').Метод path() требует, чтобы вы предоставили все обязательные параметры маршрута, поэтому вам нужно включить _route_params.

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}

Это действительно ужасно, но еслиВы разрабатываете нумерацию страниц, вам нужно будет изменить переменную страницы для каждой отдельной ссылки, поэтому вам нужно каждый раз включать все это.Возможно, у других есть лучшее решение.

1 голос
/ 29 мая 2017

Если вы используете Silex 2, вы больше не можете получить доступ к объекту Request.

Вы можете получить доступ к атрибутам текущего запроса таким образом.

app.request_stack.currentrequest.attributes.get('_route')

И для генерации полного текущего URL: path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...