当我解析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' );
答案 0 :(得分:-1)
我找到了一个我们可以通过路径找到路线的地方。那是Mojolicious::Routes::Match和没有其他方法可以做到这一点
我想到的一个丑陋的事情是需要提供Mojolicious::Controller对象。但控制器只需要做出决定:调度或不调度因为它有额外的信息来做出这个决定:这是要检查的数据conditions
我认为这个问题是因为这里有两件事:
并且find应该只返回与给定参数匹配的所有路由:path和method。像selectors does数组结果可能被缓存(现在条件的路由没有被缓存)
然后调度员应针对每条路线检查conditions,而不是matcher。这里的每个条件可以在右侧控制器的上下文中称为,而不是默认的。这将解决this issue。在大多数情况下,路由有自己的控制器类没有?
在修复此行为之前问题中的示例是查找路线的最佳方式