C::DispatchType::Chainedで/*/hoge/*というパスを実現する
CatalystのDispatchの話。 例えば多言語対応のページを作るときにパスを
http://localhost:3000/ja/hoge/xxxxxx http://localhost:3000/en/hoge/xxxxxx http://localhost:3000/de/hoge/xxxxxx
としたい時になるべくDRYで、 ja、en、deといったパラメータを取得するにはCatalyst::DispatchType::Chainedを使う。 Adventで紹介された→Catalyst Advent Calendar - Day 10 が、自分でいじってみないとよくわからないのでソース眺めながらシンプルに作ってみるとこんな感じだろうか。
package Chained::Controller::Hoge;
use strict;
use warnings;
use base 'Catalyst::Controller';
# Catalyst::DispatchType::Chainedを使って /*/hoge/* というURLを実現する
# 例 http://localhost:3000/ja/hoge/12345 でjaの部分をenとかdeにしたい場合
# jaの部分をキャプチャする
sub language : Chained PathPart('') CaptureArgs(1){
my ($self, $c, $language) = @_;
$c->stash->{language} = $language;
}
# hogeというパスを処理するメソッド
sub show_hoge : Chained('language') PathPart('hoge') Args(1){
my ( $self, $c, $args ) = @_;
$c->response->body( $c->stash->{language} . ': hoge :' . $args );
}
1;
