web-dev-qa-db-fra.com

Moteur de templates Twig: obtenir l'URL actuelle

Comment puis-je obtenir l'URL actuelle à partir d'un modèle Twig?

J'utilise Twig avec PHP, sans autre framework.

17
nKognito

Trouver l'URL actuelle

L'URL actuelle est fournie par votre serveur Web et écrite dans le super-global $_SERVER. Exécutez ce petit script, <?php echo '<pre>'; print_r($_SERVER);, sur votre serveur et accédez au répertoire racine pour rechercher la ou les valeurs recherchées.

Questions connexes sur ce sujet:

Le manuel PHP décrit la nature des valeurs $_SERVER disponibles ici .

Obtenir l'URL dans TWIG

Une fois que vous avez l'URL, vous devez la transmettre en tant que variable de modèle lorsque vous appelez render(...) sur l'instance de modèle Twig. Par exemple, vous pourriez coder ceci.

$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));

Pour utiliser la variable dans le modèle, utilisez la syntaxe {{ variable_name }}.

6
erisco

Ce qui suit fonctionne dans Silex et très certainement dans Symfony2 car ils partagent la classe Request (je n’ai pas testé cependant):

{{ app.request.getRequestUri() }}
27
neemzy

Aller http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/Request.html

ou: {{ app.request.getUri() }} pour Uri complet.

4
Breith

En gardant à l’esprit les meilleures pratiques, vous devez pour l’instant utiliser Symfony\Component\HttpFoundation\RequestStack.

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

Depuis Symfony 2.4, la meilleure pratique consiste à ne jamais injecter le service de requête, mais à injecter le service request_stack à la place [...]

Ainsi, dans une application Silex, cela pourrait être réalisé avec:

app.request_stack.getCurrentRequest.getUri
2
Pixadelic

Voici quelque chose que j'ai trouvé pour le rendre générique avec le framework sliex ​​... Je suppose que ma solution n'est pas parfaite, mais que le travail est fait.

dans votre code PHP ajoutez ce code:

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

Ensuite, dans votre modèle Twig, vous pouvez faire

{{ app.current_url }}

Faites-moi savoir quelle est la ligne de fond de cette méthode.

0
Benjamin