Procurei o código para obter o caminho atual em um modelo Twig (e não a URL completa), ou seja, não quero http://www.sitename.com/page, só preciso /page.
NÃO é uma duplicata exata, pois a resposta 2 contém as informações necessárias (sobre parâmetros de solicitação) que a pergunta vinculada não fornece. Deve-se mesclar a resposta 2 na pergunta vinculada.
Victor Sergienko
1
tente app.request.requestUri.
Kristóf Dombi
7
Nem um idiota. Votação para reabrir. Postando minha resposta como um comentário, porque eu não estou autorizado a responder agora ... {{ app.request.getBaseUrl ~ app.request.getPathInfo }}( getBaseUrlbit é opcional; só precisava se não for instalado de raiz de domínio)
A appvariável global view contém todos os tipos de atalhos úteis, como app.sessione app.security.token.user, que referenciam os serviços que você pode usar em um controlador.
Este é o único que funcionou para mim. Todos os outros perderam parâmetros de consulta que não faziam parte da rota ou dependiam do controlador e não do Twig.
Craig
13
Para obter o caminho, apenas tente {{ app.request.pathinfo }}ou veja uma lista dos métodos disponíveis em #/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
Michael
2
Essa deve ser a resposta correta. Curto e suave.
Fabian Picone #
2
uriobtém o URL com parâmetros. pathinfoobtém o caminho sem parâmetros. requestUriobtém o caminho COM parâmetros. requestUrideve ser adicionado a esta resposta IMO. Você raramente precisará do domínio e raramente removerá os parâmetros.
Você não precisará de tudo isso, a menos que queira adicionar parâmetros adicionais aos seus links, como em um pager, ou queira alterar um dos parâmetros.
Se você deseja gerar o link atual no Twig e alterar o código do idioma para alternar idiomas, isso pode ser feito no Symfony 2.1 da seguinte forma: {{path (app.request.attributes.get ('_ route'), app.request.attributes .get ('_ route_params') | mesclar ({'_ locale': 'ja'}))}} Pode funcionar se você usar a extensão Twig de Bártfai Tamás
Naytzyrhc
Para sua implementação 2.0, recebo um erro dizendo que não há contêiner. Então eu adicionei a variável como é feita no PagerfantaBundle, mas depois diz que tenho que implementar o ContainerInterface?
Squazic 9/08/2012
Você precisa criar um construtor para esta extensão, que possui um parâmetro $ container. Em seguida, na configuração do DIC, você deve declarar o contêiner como um parâmetro para a extensão. Como aqui no TwigBundle
Bártfai Tamás
12
O _route_parameters não funcionará se você tiver alguns parâmetros adicionais na string de consulta. Você poderia usar app.request.query.all.
Deve-se observar que, se você tiver parâmetros de consulta adicionais no seu URL, que não fazem parte da rota configurada, a resposta aceita não os incluirá no URL atual (caminho).
Por que você deseja parâmetros extras?
Por exemplo, se você tiver uma página de lista com registros que podem ser filtrados por palavra-chave e a página tenha paginação, provavelmente as variáveis de consulta para "palavra-chave" e "página" não estarão no seu caminho. Mas nos botões avançar e voltar da paginação, você precisa do URL atual completo (que contém as palavras-chave para que a próxima página ainda seja filtrada). E você precisa modificar a variável da página.
Como mesclar parâmetros de consulta extra
Assim, você pode obter a rota atual e mesclar as variáveis extras (após modificar uma ou mais dessas variáveis extras). Observe que você está mesclando suas próprias variáveis em app.request.query.alle, em seguida, mesclando essa matriz no app.request.attributes.get('_route_params'). O path()método requer que você forneça todos os parâmetros necessários da rota, e é por isso que você precisa incluir o _route_params.
Isso é realmente feio, mas se você estiver desenvolvendo paginação, precisará modificar a variável da página em cada link separado, para incluir a coisa toda a cada vez. Talvez outros tenham uma solução melhor.
E para gerar o URL atual completo:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
(getBaseUrl
bit é opcional; só precisava se não for instalado de raiz de domínio)Respostas:
Se você quiser lê-lo em uma variável de exibição:
A
app
variável global view contém todos os tipos de atalhos úteis, comoapp.session
eapp.security.token.user
, que referenciam os serviços que você pode usar em um controlador.fonte
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
Obter URL atual :
{{ app.request.uri }}
no Symfony 2.3, 3, 4, 5Obter apenas caminho :
{{ app.request.pathinfo }}
(sem parâmetros)Obter solicitação uri :
{{ app.request.requesturi }}
(com parâmetros)fonte
{{ app.request.pathinfo }}
ou veja uma lista dos métodos disponíveis em #/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
uri
obtém o URL com parâmetros.pathinfo
obtém o caminho sem parâmetros.requestUri
obtém o caminho COM parâmetros.requestUri
deve ser adicionado a esta resposta IMO. Você raramente precisará do domínio e raramente removerá os parâmetros.No symfony 2.1, você pode usar isto:
No symfony 2.0, uma solução é escrever uma extensão ramificada para este
E use assim
Você não precisará de tudo isso, a menos que queira adicionar parâmetros adicionais aos seus links, como em um pager, ou queira alterar um dos parâmetros.
fonte
Você pode obter o URL atual no Twig assim:
fonte
Deve-se observar que, se você tiver parâmetros de consulta adicionais no seu URL, que não fazem parte da rota configurada, a resposta aceita não os incluirá no URL atual (caminho).
Por que você deseja parâmetros extras?
Por exemplo, se você tiver uma página de lista com registros que podem ser filtrados por palavra-chave e a página tenha paginação, provavelmente as variáveis de consulta para "palavra-chave" e "página" não estarão no seu caminho. Mas nos botões avançar e voltar da paginação, você precisa do URL atual completo (que contém as palavras-chave para que a próxima página ainda seja filtrada). E você precisa modificar a variável da página.
Como mesclar parâmetros de consulta extra
Assim, você pode obter a rota atual e mesclar as variáveis extras (após modificar uma ou mais dessas variáveis extras). Observe que você está mesclando suas próprias variáveis em
app.request.query.all
e, em seguida, mesclando essa matriz noapp.request.attributes.get('_route_params')
. Opath()
método requer que você forneça todos os parâmetros necessários da rota, e é por isso que você precisa incluir o_route_params
.{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}
Isso é realmente feio, mas se você estiver desenvolvendo paginação, precisará modificar a variável da página em cada link separado, para incluir a coisa toda a cada vez. Talvez outros tenham uma solução melhor.
fonte
{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
Se você estiver usando o Silex 2, não poderá mais acessar o objeto Request.
Você pode acessar os atributos de solicitação atuais dessa maneira.
E para gerar o URL atual completo:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
fonte
global.request.attributes.get('_route')
. Ponte Twig é necessária.