Busqué el código para obtener la ruta actual en una plantilla Twig (y no la URL completa), es decir, no quiero http://www.sitename.com/page, solo necesito /page.
Este NO es un duplicado exacto, ya que la respuesta n. ° 2 contiene información necesaria (sobre los parámetros de solicitud) que la pregunta vinculada no proporciona. Uno debe combinar la respuesta # 2 en la pregunta vinculada.
Victor Sergienko
1
prueba app.request.requestUri.
Kristóf Dombi
77
No es un tonto en absoluto. Votación para reabrir. Publicar mi respuesta como un comentario porque no puedo responder ahora ... {{ app.request.getBaseUrl ~ app.request.getPathInfo }}(el getBaseUrlbit es opcional; solo es necesario si no está instalado en la raíz del dominio)
La appvariable de vista global contiene todo tipo de accesos directos útiles, como app.sessiony app.security.token.user, que hacen referencia a los servicios que puede usar en un controlador.
Este es el único que funcionó para mí. Todos los demás omitieron los parámetros de consulta que no formaban parte de la ruta o dependían del controlador y no de Twig.
Craig
13
Para obtener el camino solo intente {{ app.request.pathinfo }}o vea una lista de métodos disponibles en/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
Michael
2
Esta debería ser la respuesta correcta. Corto y liso.
Fabian Picone
2
uriObtiene la URL con los parámetros. pathinfoobtiene la ruta sin parámetros. requestUriObtiene la ruta CON parámetros. requestUridebe agregarse a esta respuesta IMO. Rara vez necesitará el dominio, y rara vez querrá eliminar los parámetros.
No necesitará todo esto a menos que desee agregar parámetros adicionales a sus enlaces, como en un buscapersonas, o si desea cambiar uno de los parámetros.
Si desea generar el enlace actual en Twig y cambiar la configuración regional para el cambio de idioma, puede hacerlo en Symfony 2.1 de la siguiente manera: {{ruta (app.request.attributes.get ('_ route'), app.request.attributes .get ('_ route_params') | merge ({'_ locale': 'ja'}))}} Puede funcionar si usa la extensión Twig de Bártfai Tamás
Naytzyrhc el
Para su implementación 2.0, recibo un error que dice que no hay contenedor. ¿Entonces agregué la variable como se hace en PagerfantaBundle, pero luego dice que tengo que implementar ContainerInterface?
Squazic
Debe crear un constructor para esta extensión, que tiene un parámetro $ container. Luego, en la configuración DIC, debe declarar el contenedor como un parámetro para la extensión. Como aquí en TwigBundle
Bártfai Tamás
12
Los _route_parameters no funcionarán si tiene algunos parámetros adicionales en su cadena de consulta. En su lugar, podría usar app.request.query.all.
wdev
34
Puede obtener la URL actual en Twig de esta manera:
Cabe señalar que si tiene parámetros de consulta adicionales en su URL, que no son parte de la ruta configurada, la respuesta aceptada no los incluirá en la URL (ruta) actual.
¿Por qué quieres parámetros adicionales?
Por ejemplo, si tiene una página de lista con registros que se pueden filtrar por palabra clave y la página tiene paginación, lo más probable es que las variables de consulta para "palabra clave" y "página" no estén en su ruta. Pero en los botones de avance y retroceso para paginación, necesita la URL actual completa (que contiene las palabras clave para que la siguiente página todavía se filtre). Y necesita modificar la variable de página.
Cómo combinar parámetros de consulta adicionales
Para que pueda obtener la ruta actual y combinar las variables adicionales (después de modificar una o más de esas variables adicionales). Tenga en cuenta que está fusionando sus propias variables con app.request.query.all, y luego fusionando esa matriz en app.request.attributes.get('_route_params'). El path()método requiere que proporcione todos los parámetros necesarios de la ruta, por lo que debe incluir el _route_params.
Eso es realmente feo, pero si está desarrollando la paginación, deberá modificar la variable de página en cada enlace por separado, por lo que debe incluir todo el asunto cada vez. Quizás otros tengan una mejor solución.
Y para generar la URL actual completa:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
(elgetBaseUrl
bit es opcional; solo es necesario si no está instalado en la raíz del dominio)Respuestas:
Si desea leerlo en una variable de vista:
La
app
variable de vista global contiene todo tipo de accesos directos útiles, comoapp.session
yapp.security.token.user
, que hacen referencia a los servicios que puede usar en un controlador.fuente
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
Obtener URL actual :
{{ app.request.uri }}
en Symfony 2.3, 3, 4, 5Obtener solo ruta :
{{ app.request.pathinfo }}
(sin parámetros)Obtener solicitud uri :
{{ app.request.requesturi }}
(con parámetros)fuente
{{ app.request.pathinfo }}
o vea una lista de métodos disponibles en/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
uri
Obtiene la URL con los parámetros.pathinfo
obtiene la ruta sin parámetros.requestUri
Obtiene la ruta CON parámetros.requestUri
debe agregarse a esta respuesta IMO. Rara vez necesitará el dominio, y rara vez querrá eliminar los parámetros.En Symfony 2.1 puedes usar esto:
En Symfony 2.0, una solución es escribir una extensión de ramita para esto
Y usar así
No necesitará todo esto a menos que desee agregar parámetros adicionales a sus enlaces, como en un buscapersonas, o si desea cambiar uno de los parámetros.
fuente
Puede obtener la URL actual en Twig de esta manera:
fuente
Cabe señalar que si tiene parámetros de consulta adicionales en su URL, que no son parte de la ruta configurada, la respuesta aceptada no los incluirá en la URL (ruta) actual.
¿Por qué quieres parámetros adicionales?
Por ejemplo, si tiene una página de lista con registros que se pueden filtrar por palabra clave y la página tiene paginación, lo más probable es que las variables de consulta para "palabra clave" y "página" no estén en su ruta. Pero en los botones de avance y retroceso para paginación, necesita la URL actual completa (que contiene las palabras clave para que la siguiente página todavía se filtre). Y necesita modificar la variable de página.
Cómo combinar parámetros de consulta adicionales
Para que pueda obtener la ruta actual y combinar las variables adicionales (después de modificar una o más de esas variables adicionales). Tenga en cuenta que está fusionando sus propias variables con
app.request.query.all
, y luego fusionando esa matriz enapp.request.attributes.get('_route_params')
. Elpath()
método requiere que proporcione todos los parámetros necesarios de la ruta, por lo que debe incluir el_route_params
.{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}
Eso es realmente feo, pero si está desarrollando la paginación, deberá modificar la variable de página en cada enlace por separado, por lo que debe incluir todo el asunto cada vez. Quizás otros tengan una mejor solución.
fuente
{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
Si está utilizando Silex 2, ya no puede acceder al objeto Solicitar.
Puede acceder a los atributos de solicitud actuales de esta manera.
Y para generar la URL actual completa:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
fuente
global.request.attributes.get('_route')
. Se requiere puente de ramita .