日向夏特殊応援部隊

俺様向けメモ

actionのuriを取得する

多分応用としてはtemplateに渡した時にuriの記述を抽象化出来るって事なんですけど、
Catalyst::Dispatcherにあるget_action(), get_action_by_path()メソッドを使うと、
namespace + action_name, pathなどでCatalyst::Actionまたはその派生クラスを取得する事が出来ます。


これと同じくCatalyst::Dispatcherにあるuri_for_action()メソッドを使うと、
割と綺麗にURIを抽象化する事が出来そうです。

package MyApp::Controller::Foo;

use strict;
use warnings;
use base 'Catalyst::Controller';

sub test : Regex('^foo/(\w+)/test/(\d*)$') {
    my ( $self, $c ) = @_;

    $c->response->body($c->dispatcher->uri_for_action($c->dispatcher->get_action('test', 'foo'), ['zigorou', 10]));
}

で結果ですけど、

/foo/zigorou/test/10

なのでこれを使うと、

  1. namespace
  2. action名
  3. args

URIを取得出来るんで、templateでの記述が多少楽になるかなーと。
これにベースのURLとか指定出来たりだとか、差し替えたりとか出来たら凄い便利じゃないかなーと。


ちょっと作ってみようかな。