« XML::Simpleを使うときは | メイン | AskビデオのCustomFeed::Config asset »

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;

トラックバック

このエントリーのトラックバックURL:
http://yusukebe.com/mt/mt-tb.cgi/2068

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


ブログSEO対策:track word seo