« [Femo]公開メモ機能追加しました。 | メイン | [Femo]公開ページでGoogle AnalyticsとFeedBurner »

Catalystでユーザページ

Femoでのユーザページのコード。
Femo::Controller::Userというコントローラで実装している。
同じ正規表現が繰り返しているのでもうすこしなんとかならないかと

package Femo::Controller::User;

use strict;
use warnings;
use base 'Catalyst::Controller';

sub auto : Private {
    my ( $self, $c ) = @_;
    $c->stash->{view} = $c->model('Users')->retrieve(publish_id=>$c->req->snippets->[0]);
    if( !$c->stash->{view} ) {
        $c->res->status('404');
        $c->res->output('Not Found');
        $c->req->action(undef);
        return;
    }
    $c->stash->{template} = 'user.tt';
    $c->req->params->{page} ||= 1;
}

#index
sub user : Regex('^([a-z0-9_]{3,20})$') {
    my ( $self, $c ) = @_;
    $c->stash->{view} = $c->model('Entries')->...
}

sub rss : Regex('^([a-z0-9_]{3,20})/rss$') {
    my ( $self, $c ) = @_;
    $c->forward('user');
    #rss
}

sub tag : Regex('^([a-z0-9_]{3,20})/tag/(.+)$') {
    my ( $self, $c ) = @_;
}

#あと省略


ユーザIDの正規表現「([a-z0-9_]{3,20})」が繰り返すのがあれだなぁ。

__PACKAGE__->config->{namespace} = qr/^([a-z0-9_]{3,20})/;

とか設定して、PathとかLocalRegexが使えたらいいかも。ただ、IDの抽出を一度autoで書けば動いたのはよかった。

コメント

URL Path Handling を利用したコードで参照させていただきました。Trackback に失敗してしまうみたいなので、コメントつけさせていただきます。

> koさん
参考にさせていただきます。
Femoの場合日付、tag、各エントリーページとIDの後ろにも正規表現があったりしますので、
Dispatcherを実装してうんぬんとかも考えましたが、面倒なのでやめました。

Trackbackの件はMTの方を修正しました。

コメントを投稿