当我解析 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对象。但控制器只需要做出决定:调度或不调度因为它有额外的信息来做出这个决定:这是检查条件的数据
我认为问题是因为这里混合了两件事:
find应该只返回与给定参数匹配的所有路由:路径和方法。就像选择器一样,数组结果可能会被缓存(现在带有条件的路由不会被缓存)
然后调度程序应该检查每条路线的条件,而不是匹配器。这里每个条件都可以在右控制器的上下文中调用,而不是默认控制器。这将解决这个问题。大多数情况下,路由都有自己的控制器类,没有吗?
在此行为得到修复之前,问题中的示例是查找路线的最佳方法