2012-02-18 28 views
17

¿Cómo puedo obtener la URL actual de una plantilla Twig?Twig templates engine: obtener la URL actual

Estoy usando Twig con PHP, sin ningún otro marco.

+0

¿Por qué no pasar la URL actual como una variable de plantilla? O podría escribir una etiqueta de plantilla que emita la URL. –

Respuesta

6

Encontrar la URL actual

La URL actual es suministrada por el servidor web y escribe en el $_SERVER súper mundial. Ejecute este pequeño script, <?php echo '<pre>'; print_r($_SERVER);, a través de su servidor y busque los valores que está buscando.

preguntas relacionadas sobre este tema:

The PHP manual describes the nature of the available $_SERVER values here.

Obtener la URL en RAMITA

Una vez que tenga la URL, es necesario pasarlo como una variable de plantilla al llamar render(...) en la instancia de la plantilla de la ramita. Por ejemplo, puede codificar esto.

$current_url = // figure out what the current url is 

// pass the current URL as a variable to the template 
echo $template->render(array('current_url' => $current_url)); 

utilizar la variable en la plantilla, se utiliza la sintaxis {{ variable_name }}.

+0

Me pregunto si existe alguna herramienta interna (variable o método) para obtener URL de Twig? – nKognito

+0

Puede encontrar algún código ya escrito para este propósito, pero recuperar la URL actual no está dentro del alcance de un motor de plantillas, así que dudo que Twig tenga algo incorporado. Ciertamente no pude encontrar nada. – erisco

0

Aquí encontré algo para que sea genérico con sliex ​​Framework. Supongo que mi solución no es perfecta, pero es hacer el trabajo.

en su código PHP añadir este código:

$app = new Silex\Application(); 
// add the current url to the app object. 
$app['current_url'] = $_SERVER['REQUEST_URI']; 

Luego, en su plantilla Twig se puede hacer

{{ app.current_url }} 

Déjame saber lo que es la línea botom de este método.

25

las siguientes obras en Silex y con toda seguridad en Symfony2, ya que comparten la clase de solicitud (no he probado sin embargo):

{{ app.request.getRequestUri() }} 
+5

'{{app.request.requestUri}}' – eightyfive

+0

Mejor aún, sí. – neemzy

+1

Desaprobado, uno no debe usarlo. https://github.com/silexphp/Silex/issues/1257#issuecomment-141058724 – Tieme

2

Teniendo en cuenta las mejores prácticas, en este momento debe usar Symfony\Component\HttpFoundation\RequestStack.

Ver http://symfony.com/blog/new-in-symfony-2-4-the-request-stack.

A partir de Symfony 2.4, la mejor práctica es no inyectar el servicio de petición, pero para inyectar el servicio request_stack en lugar [...]

Así, en una aplicación de Silex se podría lograr con :

app.request_stack.getCurrentRequest.getUri