2017-01-04 5 views
4

私はhtmlレスポンスボディを解析するときに、ボディにあるすべてのリンクのルート名を探したいと思います。次のコードスニペットを使用します。Mojoliciousで指定されたパスのルート名を見つける方法は?

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は私にルートの名前を与えます。

しかし、指定されたパスで経路名を見つけるより簡単な方法はありますか?

私のようなものを探しています:私は次のルートを持っているので、user_hash_checkを返す必要があり$app->routes->find('/api/v/users/146/link/7QRgs')

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

を見つけるための最善の方法は、ありますか?自分のアプリケーションのWebサイトを解析していますか? – simbabque

+0

@simbabque:はい、あります。実際に私はテストでこれを使用します –

+0

面白いアプローチ。リンクをクリックするだけでは不十分ですか? – simbabque

答えて

-1

私たちはパスでルートを見つけることができる唯一の場所を発見しました。それは私の心に、ここでこの

1つの醜いことを行うための他の方法はMojolicious::Controllerオブジェクトを提供する必要はありませんMojolicious::Routes::Matchです。しかし、コントローラは、唯一の意思決定を行うために必要とされる:ディスパッチか、それは、この決定を行うために余分な情報を持っているのでを派遣:

:これは私があるため、ここでのだと思うようconditions

問題をチェックするためのデータであるが二つのことを混在していますパスと方法:

  1. 要求
  2. パス

そしてfindはただ与えられた引数に対して一致するすべてのルートを返す必要があります。 selectors doesよう多分キャッシュ(現在の条件付きルートがキャッシュされていない)のアレイ結果は

そしてディスパッチャは各ルートではなく、matcherに対してconditionsを確認してください。ここで、各条件は右コントローラのコンテキストでと呼ばれ、デフォルトのものではありませんです。これでthis issueが修正されます。ルートには、ほとんどの場合、独自のコントローラクラスがありませんでしたか?この動作は、を固定されますまで、これを使用しないとき

問題の例では、ルート好奇心のうち

関連する問題