CGI::Application::URIMapping 0.04
CGI-Application-URIMapping-0.04 - A dispatcher and permalink builder - metacpan.org
URI がパーマリンク形式じゃない場合にリダイレクトとか書けるようになった。
例えば、以下のコードだと、
- users?order_by=name
- users?category=friends&order_by=age&submit=検索
- users/friends?order_by=name
といったクエリは、自動的に、それぞれ、
- users
- users/friends?order_by=age
- users/friends
といったパーマリンクにリダイレクトした上で表示される。これで、フォーム入力の結果をパーマリンクに変換するとか、いちいち手で書く必要がなくなる。
package MyApp::Users; use base qw/CGI::Application/; MyApp::URIMapping->register({ path => 'users/:category?', query => [ { name => 'order_by', omit => 'name', }, ], }); sub users { my $self = shift; # パーマリンク形式じゃなければリダイレクト return if $self->normalize_uri; ... }
別のパッケージからパーマリンクを作るには、
my $uri = MyApp::Users->build_uri([ { category => $cat }, $self, ]);
とか書いておけば、category は $cat に、それ以外のパラメータは現在のパラメータを継承して、パーマリンクを作ってくれる。
あとは、同様のパーマリンク化処理として form の onsubmit ハンドラ用の JavaScript を生成するような関数を整備すれば完成かな。