Chained
Chainedアクションを使って、/ユーザー名/...
だとそのユーザーのエントリを表示。
/...
だと全員のエントリを表示するアプリケーションの例。
最後にはてなっぽく /ユーザー名/profile
もつけてある。
package MyApp::Controller::UserView;
use strict;
use warnings;
use base 'Catalyst::Controller';
sub user_detect :Chained('/') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $user) = @_;
$c->stash->{user} = $c->model('DBIC::User')->find({ username => $user })
or $c->detach('/default');
}
sub user_root :Chained('user_detect') :PathPart('') :Args(0) {
my ($self, $c) = @_;
$c->forward('/view/index');
}
sub user_tag :Chained('user_detect') :PathPart('tag') :Args(1) {
my ($self, $c, $tags) = @_;
$c->forward('/view/tag');
}
sub user_year :Chained('user_detect') :PathPart('') :Args(1) {
my ($self, $c, $year) = @_;
$c->forward('/view/year');
}
sub user_month :Chained('user_detect') :PathPart('') :Args(2) {
my ($self, $c, $year, $month) = @_;
$c->forward('/view/month');
}
sub user_day :Chained('user_detect') :PathPart('') :Args(3) {
my ($self, $c, $year, $month, $day) = @_;
$c->forward('/view/day');
}
sub user_permalink :Chained('user_detect') :PathPart('') :Args(4) {
my ($self, $c, $year, $month, $day, $id) = @_;
$c->forward('/view/permalink');
}
sub user_profile :Chained('user_detect') :PathPart('profile') :Args(0) {
my ($self, $c) = @_;
$c->stash->{template} = 'user/profile.tt';
}
1;
うーん、微妙w
:Chained('/') :PathPart('')
はあんまりやらないほうがよさげ。