flavour on Catalyst

URLパスの一番最初を Blosxom でいう flavour のように使ってみるという試み。

sub prepare_action {
    my $c = shift;

    if ( my $path = $c->req->path ) {
        my ($flavour) = $path =~ m!^([^/]+)!;

        if ( $flavour !~ /^(search|tag|\d{4})$/ ) {
            $c->stash->{flavour} = $flavour;
            $c->stash->{_path}   = $c->req->path;

            $path =~ s!^$flavour/+!!;
            $c->req->path( $path );
        }
    }

    $c->NEXT::prepare_action(@_);

    $c->req->path( delete $c->stash->{_path} ) if $c->stash->{_path};
    $c->stash->{flavour} ||= $c->config->{default_flavour} || 'html';
}

こんな感じ?

これで、パスが search, tag, 2005 とか以外は flavour としてあつかわれて、

/flavour/tag/clon

とかでも /tag/clon と同じコントローラが呼ばれる。わかりにく!

Blosxom は index.flavour とか拡張子で切り分けてたけど、なんか変な flavour 作ると URL がダサいので。

でもこっちはコントローラで使ってる文字を使えないというのもあるし。

by typester / at 2005-12-07T01:13:00 / clon · catalyst / Comments(0)