Это не является точной копией, так как ответ № 2 содержит необходимую информацию (о параметрах запроса), которую не содержит связанный вопрос. Нужно объединить ответ № 2 в связанный вопрос.
Виктор Сергиенко
1
попробуйте app.request.requestUri.
Кристоф Домби
7
Не дурак вообще. Голосование возобновить. Публикация моего ответа в качестве комментария, потому что я не могу отвечать сейчас ... {{ app.request.getBaseUrl ~ app.request.getPathInfo }}( getBaseUrlбит не является обязательным; требуется только если не установлен в корневой каталог домена)
appГлобальный переменный вид содержит все виды полезных ярлыков, такие , как app.sessionи app.security.token.user, которые ссылаются на услуги , которые вы могли бы использовать в контроллере.
Это единственный, который работал на меня. Все остальные пропустили параметры запроса, которые не были частью маршрута или полагались на контроллер, а не на Twig.
Крейг,
13
Чтобы получить путь, попробуйте {{ app.request.pathinfo }}или посмотрите список доступных методов в/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
Michael
2
Это должен быть правильный ответ. Коротко и гладко.
Фабиан Пикон
2
uriполучает URL с параметрами. pathinfoполучает путь с NO параметрами. requestUriполучает путь С параметрами. requestUriК этому ответу следует добавить ИМО. Вам редко понадобится домен, и вы редко захотите удалить параметры.
Все это вам не понадобится, если вы не хотите добавлять дополнительные параметры в свои ссылки, как в пейджере, или если вы хотите изменить один из параметров.
Если вы хотите сгенерировать текущую ссылку в Twig и изменить локаль для переключения языка, это можно сделать в Symfony 2.1 следующим образом: {{path (app.request.attributes.get ('_ route'), app.request.attributes .get ('_ route_params') | merge ({'_ locale': 'ja'}))}} Это может сработать, если вы используете расширение Twig от Bártfai Tamás
Naytzyrhc
В вашей версии 2.0 я получаю сообщение об ошибке, в котором говорится, что контейнера нет. Таким образом, я добавил переменную, как это делается в PagerfantaBundle, но затем он говорит, что я должен реализовать ContainerInterface?
Squazic
Вы должны создать конструктор для этого расширения, у которого есть параметр $ container. Затем в конфигурации DIC вы должны объявить контейнер как параметр для расширения. Как здесь в TwigBundle
Bártfai Tamás
12
_Route_parameters не будут работать, если у вас есть дополнительные параметры в строке запроса. Вместо этого вы можете использовать app.request.query.all.
wdev
34
Вы можете получить текущий URL в Twig следующим образом:
Следует отметить, что если у вас есть дополнительные параметры запроса в вашем URL, которые не являются частью настроенного маршрута, принятый ответ не будет включать их в текущий URL (путь).
Зачем вам нужны дополнительные параметры?
Например, если у вас есть страница списка с записями, которые можно отфильтровать по ключевому слову, а страница имеет нумерацию страниц, скорее всего, переменные запроса для «ключевого слова» и «страницы» не будут присутствовать в вашем маршруте. Но в ваших кнопках «вперед» и «назад» для подкачки вам нужен полный текущий URL (который содержит ключевые слова, поэтому следующая страница по-прежнему фильтруется). И вам нужно изменить переменную страницы.
Как объединить дополнительные параметры запроса
Таким образом, вы можете получить текущий маршрут и объединить дополнительные переменные (после изменения одной или нескольких из этих дополнительных переменных). Обратите внимание, что вы объединяете свои собственные переменные с app.request.query.all, а затем объединяете этот массив с app.request.attributes.get('_route_params'). path()Метод требует , чтобы вы предоставите все необходимые параметры маршрута, поэтому необходимо включать _route_params.
Это действительно ужасно, но если вы разрабатываете нумерацию страниц, вам нужно будет изменить переменную страницы в каждой отдельной ссылке, поэтому вам придется каждый раз включать все это. Возможно, у других есть лучшее решение.
И для генерации полного текущего URL:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
(getBaseUrl
бит не является обязательным; требуется только если не установлен в корневой каталог домена)Ответы:
Если вы хотите прочитать это в переменную представления:
app
Глобальный переменный вид содержит все виды полезных ярлыков, такие , какapp.session
иapp.security.token.user
, которые ссылаются на услуги , которые вы могли бы использовать в контроллере.источник
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
Получить текущий URL :
{{ app.request.uri }}
в Symfony 2.3, 3, 4, 5Получить только путь :
{{ app.request.pathinfo }}
(без параметров)Получить запрос URI :
{{ app.request.requesturi }}
(с параметрами)источник
{{ app.request.pathinfo }}
или посмотрите список доступных методов в/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
uri
получает URL с параметрами.pathinfo
получает путь с NO параметрами.requestUri
получает путь С параметрами.requestUri
К этому ответу следует добавить ИМО. Вам редко понадобится домен, и вы редко захотите удалить параметры.В Symfony 2.1 вы можете использовать это:
В Symfony 2.0 одним из решений является написание расширения ветки для этого
И использовать как это
Все это вам не понадобится, если вы не хотите добавлять дополнительные параметры в свои ссылки, как в пейджере, или если вы хотите изменить один из параметров.
источник
Вы можете получить текущий URL в Twig следующим образом:
источник
Следует отметить, что если у вас есть дополнительные параметры запроса в вашем 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 }))) }}
Это действительно ужасно, но если вы разрабатываете нумерацию страниц, вам нужно будет изменить переменную страницы в каждой отдельной ссылке, поэтому вам придется каждый раз включать все это. Возможно, у других есть лучшее решение.
источник
{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
Если вы используете Silex 2, вы больше не можете получить доступ к объекту Request.
Вы можете получить доступ к текущим атрибутам запроса таким образом.
И для генерации полного текущего URL:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
источник
global.request.attributes.get('_route')
. Требуется ветка-мост .