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('')

はあんまりやらないほうがよさげ。

by typester / at 2006-09-02T22:13:00 / perl · catalyst / Comments(0)