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

时间:2017-01-04 15:07:21

标签: 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 } );

然后$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' );

1 个答案:

答案 0 :(得分:-1)

我找到了一个我们可以通过路径找到路线的地方。那是Mojolicious::Routes::Match没有其他方法可以做到这一点

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

我认为这个问题是因为这里有两件事:

  1. 请求
  2. 路径
  3. 并且find应该只返回与给定参数匹配的所有路由:path和method。像selectors does数组结果可能被缓存(现在条件的路由没有被缓存)

    然后调度员应针对每条路线检查conditions,而不是matcher。这里的每个条件可以在右侧控制器的上下文中称为,而不是默认的。这将解决this issue。在大多数情况下,路由有自己的控制器类没有?

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