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
なのでこれを使うと、
- namespace
- action名
- args
でURIを取得出来るんで、templateでの記述が多少楽になるかなーと。
これにベースのURLとか指定出来たりだとか、差し替えたりとか出来たら凄い便利じゃないかなーと。
ちょっと作ってみようかな。