Comment puis-je obtenir l'URL actuelle à partir d'un modèle Twig?
J'utilise Twig avec PHP, sans autre framework.
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 }}
.
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() }}
Aller http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/Request.html
ou: {{ app.request.getUri() }}
pour Uri complet.
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
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.