web-dev-qa-db-fra.com

Symfony2 - Obtenir l'URL actuelle ou la route dans un modèle TWIG?

Mon itinéraire est 

admin:
      path:     /admin/
      defaults: { _controller: CatalogWebBundle:Admin:admin }

Comment puis-je obtenir le nom de la route dans le modèle PHP? 

9
Wizard

Pour obtenir l'URL actuelle

$request->getRequestUri(); ou app.request.uri

En ce qui concerne la route elle-même, la meilleure pratique consiste à l'injecter en tant que paramètre dans votre contrôleur, voir le doc ici . Vous pouvez utiliser $request->attributes->get('_route') ou app.request.attributes.get('_route') mais ce n'est pas aussi fiable. Par exemple, il ne fonctionnera pas avec les transferts comme vous transmettez à un contrôleur, pas à un chemin. Et ce n’est vraiment que destiné à des fins de débogage selon Fabien (@fabpot), le créateur }, donc je ne le ferais pas pour de futures mises à jour.

Sidenote

N'oubliez pas de éviter $request->get() à tout moment, donc pas de $request->get('_route') comme je l'ai déjà vu dans certaines réponses à des questions similaires.

Si vous n’avez pas besoin de la souplesse des contrôleurs, il est préférable d’utiliser explicitement obtenir les paramètres de requête de la propriété publique appropriée à la place (attributs, requête, requête)

La raison en est qu'il va chercher dans lesdites propriétés publiques (attributs, requête et requête) au lieu de seulement celle-ci (attributs), ce qui le ralentit beaucoup

14
Tom Toms

Ce n'est pas une bonne chose à faire directement dans Twig mais vous pouvez toujours le faire. Le meilleur moyen est de le passer comme argument du contrôleur.

Obtenir les paramètres de route dans Twig.

{{ app.request.attributes.get('_route_params') }}

ET

Obtient le nom du paquet entier dans Twig.

{{ app.request.attributes.get("_controller") }}

Obtenez le nom de la route dans Twig.

{{ app.request.attributes.get('_route') }}
5
BentCoder

Pour obtenir le nom de la route dans Symfony2, entrez l'extrait de code suivant.

$request = $this->container->get('request');
$routeName = $request->get('_route');

Pour obtenir l'URL dans Symfony2,

$request = $this->container->get('request');
$routeURL = $request->getRequestUri();
1
kisanme

En ajoutant que dans certains cas, app.request.uri ne renverra pas l'URL de la page en cours.

Exemple: dans votre modèle de page, vous appelez un contrôleur via: 

{{ render(controller('AppBundle:MyController:myBlock')) }}

Et dans myBlockAction, vous restiturez un autre modèle, par exemple block.html.twig.

Un appel à app.request.uri à partir de block.html.twig affichera quelque chose comme: 

http://www.example.com/app.php/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DAppBundle%253AMyController%253AmyBlock

Si vous voulez obtenir l'URL absolue de la page rendue à l'intérieur de block.html.twig, vous pouvez la remonter à partir de variables php $ _SERVER:

{{ app.request.server.get('REQUEST_SCHEME') ~ '://' ~ 
   app.request.server.get('SERVER_NAME') ~ 
   app.request.server.get('PHP_SELF') }}

Vous pouvez également ajouter QUERY_STRING si nécessaire. 

0
scandel