/ / Comment trouver un nom d’itinéraire pour un chemin donné dans Mojolicious? - perl, mojolicious

Comment trouver un nom d'itinéraire pour un chemin donné dans Mojolicious? - perl, mojolicious

Lorsque j'analyse le corps de réponse HTML, je veux trouver des noms de route pour tous les liens trouvés dans le corps. J'utilise l'extrait de code suivant:

    my $url =  Mojo::URL->new( $got );
my $method =  uc( $url->query->clone->param( "_method" ) || "GET" );
my $c =  $t->app->build_controller;
my $m =  Mojolicious::Routes::Match->new( root => $t->app->routes );

$m->find( $c => { method => $method,  path => $url->path } );

alors $m->endpoint->name me donne le nom de la route.

Mais y a-t-il un moyen plus simple de trouver un nom de route par chemin donné?

Je cherche quelque chose comme: $app->routes->find( "/api/v/users/146/link/7QRgs" ) qui devrait retourner user_hash_check parce que j'ai la prochaine route:

$guest->get( "/users/:id/link/:hash", "user_hash_check" )->to( "user#hash_check" );

Réponses:

-1 pour la réponse № 1

Je n’ai trouvé qu’un seul endroit où trouver chemin par chemin. C'est Mojolicious :: Routes :: Match et il n'y a pas d'autre moyen de le faire

La seule chose laide à mon avis est l'exigence de fournir Mojolicious :: Contrôleur objet. Mais le contrôleur est seulement tenu de prendre une décision: envoi ou non envoi Parce qu'il a des informations supplémentaires pour prendre cette décision: ce sont des données à vérifier conditions

Le problème, comme je le pense, est lié à deux choses:

  1. Demande
  2. Chemin

Et trouver devrait simplement renvoyer toutes les routes correspondant à des arguments donnés: chemin et méthode. Comme les sélecteurs font Le résultat du tableau peut être mis en cache (maintenant, les routes avec conditions ne sont pas mises en cache)

alors répartiteur devrait vérifier conditions contre chaque itinéraire, pas matcher. Ici chaque condition peut être appelée dans le contexte du contrôleur droit et non par défaut. Et cela va réparer ce problème. Les routes ont dans la plupart des cas leur propre classe de contrôleur non?

Tant que ce comportement ne sera pas corrigé l'exemple dans la question est le meilleur moyen de trouver des itinéraires