如何在 Mojolicious 中找到给定路径的路径名称?

Eug*_*kov 5 perl mojolicious

当我解析 html 响应正文时,我想为正文中找到的所有链接找到路由名称。我使用下一个代码片段:

    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 } );
Run Code Online (Sandbox Code Playgroud)

然后$m->endpoint->name给我路线名称。

但是有没有更简单的方法可以通过给定的路径查找路线名称?

我正在寻找类似的东西:$app->routes->find( '/api/v/users/146/link/7QRgs' )它应该返回,user_hash_check因为我有下一条路线:

$guest->get( '/users/:id/link/:hash', 'user_hash_check' )->to( 'user#hash_check' );
Run Code Online (Sandbox Code Playgroud)

Eug*_*kov -1

我只找到一处可以按路径找到路线的地方。这就是Mojolicious::Routes::Match并且没有其他方法可以做到这一点

在我看来,一件丑陋的事情是需要提供Mojolicious::Controller对象。但控制器只需要做出决定:调度或不调度因为它有额外的信息来做出这个决定:这是检查条件的数据

我认为问题是因为这里混合了两件事:

  1. 要求
  2. 小路

find应该只返回与给定参数匹配的所有路由:路径和方法。就像选择器一样,数组结果可能会被缓存(现在带有条件的路由不会被缓存)

然后调度程序应该检查每条路线的条件,而不是匹配器。这里每个条件都可以在右控制器的上下文中调用,而不是默认控制器。这将解决这个问题。大多数情况下,路由都有自己的控制器类,没有吗?

在此行为得到修复之前,问题中的示例是查找路线的最佳方法