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 | 2006年04月28日 03:42
> koさん
参考にさせていただきます。
Femoの場合日付、tag、各エントリーページとIDの後ろにも正規表現があったりしますので、
Dispatcherを実装してうんぬんとかも考えましたが、面倒なのでやめました。
Trackbackの件はMTの方を修正しました。
投稿者: かぜぶろ | 2006年04月28日 13:28