Laravel obtenir le nom de l'itinéraire à partir de l'URL
Dans Laravel, nous pouvons obtenir le nom de l'itinéraire à partir de l'URL actuelle via ce:
Route::currentRouteName()
Mais, comment pouvons-nous obtenir le nom de la route à partir d'un URL donné?
Merci.
- Pouvez-vous expliquer ce que vous essayez de faire?
- Je suis en train d'essayer d'obtenir le nom de la route à partir d'une URL donnée, et non pas l'URL actuelle.
- Non, ce que je comprends parfaitement, mais je ne comprends pas pourquoi vous avez besoin de le faire. Essentiellement, vous êtes à la recherche afin d'inverser la routes.php fichier.
- Ce n'est pas un bon modèle
- Si vous pouviez expliquer pourquoi, nous pouvons trouver un autre moyen
Vous devez vous connecter pour publier un commentaire.
Un moyen très facile de faire
Laravel 5.2
Il sorties de mon nom de la Route comme ce
slug.posts.show
Mise à jour: Pour la méthode comme POST, METTRE ou SUPPRIMER vous pouvez le faire comme ceci
Également lorsque vous exécutez
app('router')->getRoutes()->match(app('request')->create('/qqq/posts/68/u1', 'POST'))
ce sera le retour deIlluminate\Routing\Route
instance où vous pouvez appeler plusieurs utile méthodes publiques commegetAction
,getValidators
etc. Vérifiez la source https://github.com/illuminate/routing/blob/master/Route.php pour plus de détails.Je ne pense pas que cela peut être fait avec de dehors-de-le-boîte de Laravel. Rappelez-vous aussi que toutes les lignes ne dans Laravel sont nommés, alors vous voudrez probablement pour récupérer l'objet route, pas le nom de la route.
Une solution possible serait d'étendre la valeur par défaut
\Iluminate\Routing\Router
de classe et d'ajouter une méthode à la classe personnalisée qui utilise le protégéRouter::findRoute(Request $request)
méthode.Un exemple simplifié:
Ce devrait de retour de la route qui correspond à l'URL spécifiée, mais je n'ai pas réellement testé cette.
Notez que si vous voulez que ce nouveau custom routeur pour remplacer le haut-en-un, vous devrez également créer un nouveau fournisseur de services pour enregistrer votre nouvelle classe dans le conteneur IoC à la place de celui par défaut.
Vous pourriez adapter le fournisseur de services dans le code ci-dessous à vos besoins:
https://github.com/jasonlewis/enhanced-router
Sinon, si vous voulez juste pour instancier manuellement personnalisé de votre routeur dans votre code en tant que de besoin, que vous avez à faire quelque chose comme:
Il peut être fait sans l'extension par défaut
\Iluminate\Routing\Router
classe.Si vous appelez
Route::currentRouteName()
aprèsdispatchToRoute
appel, il retourne le nom de l'itinéraire de distribué demande.