obtener url actual en plantilla de ramita?


Busqué el código para obtener la ruta actual en una plantilla Twig (y no la URL completa), i. e. No quiero http://www.sitename.com/page, solo necesito /page.

 133
Author: Cœur, 2012-02-21

6 answers

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

Si desea leerlo en una variable de vista:

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

La variable vista global app contiene todo tipo de atajos útiles, como app.session y app.security.token.user, que hacen referencia a los servicios que puede usar en un controlador.

 207
Author: Rodney Folz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-14 00:05:10

Obtener url actual: {{ app.request.uri }} en Symfony 2.3, 3, 4


Obtener solo la ruta : {{ app.request.pathinfo }}

 147
Author: mrzmyr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-05 23:07:39

En symfony 2.1 puedes usar esto:

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

En symfony 2.0, una solución es escribir una extensión ramita para esto

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

Y usar así

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

No necesitará todo esto a menos que desee agregar parámetros adicionales a sus enlaces, como en un buscapersonas, o que desee cambiar uno de los parámetros.

 114
Author: Bártfai Tamás,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-21 20:07:56

Puedes obtener la URL actual en Twig así:

{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
 28
Author: Zaheer Babar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-08 18:21:56

Debe tenerse en cuenta que si tiene parámetros de consulta adicionales en su URL, que son no parte de la ruta configurada, la respuesta aceptada no los incluirá en la URL actual (ruta).

¿Por qué querrías 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 tu adelante y atrás botones para la paginación, necesita la URL actual completa (que contiene las palabras clave para que la página siguiente siga filtrada). Y necesita modificar la variable de página.

Cómo Combinar Parámetros de Consulta Adicionales

Así que puede obtener la ruta actual y fusionar 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 método path() requiere que proporcione todos los parámetros requeridos de la ruta, por lo que es necesario 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 paginación, necesitará modificar la variable de página en cada enlace separado, por lo que debe incluir todo el proceso cada vez. Tal vez otros tengan una mejor solución.

 17
Author: Chadwick Meyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-13 00:34:48

Si está utilizando Silex 2, ya no puede acceder al objeto de solicitud.

Puede acceder a los atributos de la solicitud actual de esta manera.

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

Y para generar la URL actual completa : path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))

 1
Author: Tim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-29 07:54:18