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?
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
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') }}
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();
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.