Возможный дубликат:
Как получить текущий маршрут в Symfony 2?
Я просмотрел код, чтобы получить текущий путь в шаблоне Twig (а не полный URL), т.е.
Я не хочу http://www.sitename.com/page
, мне нужно только /page
.
Возможный дубликат:
Как получить текущий маршрут в Symfony 2?
Я просмотрел код, чтобы получить текущий путь в шаблоне Twig (а не полный URL), т.е.
Я не хочу http://www.sitename.com/page
, мне нужно только /page
.
{{ 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
, которые ссылаются на службы, которые вы можете использовать в контроллере.
В 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 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'}) }}
Вам не нужно все это, если вы не хотите добавлять дополнительные параметры к своим ссылкам, например, в пейджер, или вы хотите изменить один из параметров.
Получить текущий url с помощью {{ app.request.uri }}
в Symfony 2.3
Вы можете получить текущий URL-адрес в Twig следующим образом:
{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
Следует отметить, что если у вас есть дополнительные параметры запроса в вашем 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 }))) }}
Это действительно уродливо, но если вы разрабатываете разбиение на страницы, вам нужно будет изменить переменную страницы на каждую отдельную ссылку, поэтому каждый раз нужно включать все это. Возможно, у других есть лучшее решение.
Если вы используете 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'))