Catalyst の config
基本的なものは MyApp.pm
ないで
__PACKAGE__->config( ... );
で指定し、deploy 先で違うものなんかの設定を myapp.yml に書いて上書きとかってやろうとおもっても、現状の Catalyst.pm
では
$class->config( { %$oldconf, %$conf } );
ってなってるだけだから普通に深い階層になるのがデフォな Catalyst 設定ではいまいち使えないあるね。
たとえば myapp.yml に
session:
cookie_name: session
とか書くと、$c->{config}->{session}
のほかのキー消されちゃう><
こういう使いかたしてる人いねってことかしら?
見たけど問題なさげ。
yml では $c->config->{session}
と $c->config->{authentication}->{flickr}
を上書きしてるんだけど、後者だけしか上書きされてなかったという謎現象。
とりあえず yml ファイルのパスを自動指定ではなくて、明示的に $c->config->{file}
に書いたら直った。
$c->config->{session}
に clon.yml の内容が反映されてない。
というか反映されているけど、Session プラグインはそれ読んでないみたいだ。つか気づくのおせー。会社着て verify_address => 0
がうごいてなくて気づいた。
んー? あとで Session プラグインを読む。
Static::Simple と StackTrace のロード
はこんな感じでどう。
__PACKAGE__->setup(
do {
my @plugins;
push @plugins, 'StackTrace' if $ENV{CATALYST_DEBUG};
push @plugins, 'Static::Simple' if $ENV{CATALYST_ENGINE} =~ /^HTTP/;
@plugins;
}
);
StashLex
やべー。もう $c->stash->{foo}
とかしなくていいよ!
my $foo : stashed;
で!
Catalyst::Plugin::I18N 0.5
きたっぽい。後で使い方を書く。
#catalyst-ja @ ircnet
ので、よかったらいらしてください。
日付フィルタ
ここみたいに Path が /2005/12/27 とかからはじまっていた場合、それを日付情報としてパースし、それ以降の Path とともに default コントローラを呼ぶには
sub day : Regex('^(\d{4})/([01]?\d)/([0-3]?\d)(?:/(.*))?') {
my ( $self, $c ) = @_;
( $c->stash->{yr}, $c->stash->{mo}, $c->stash->{da} )
= @{ $c->req->snippets };
$c->forward( '/default', [ split '/', $c->req->snippets->[-1] ] );
}
sub month : Regex('^(\d{4})/([01]?\d)(?:/(.*))?') {
my ( $self, $c ) = @_;
( $c->stash->{yr}, $c->stash->{mo} ) = @{ $c->req->snippets };
$c->forward( '/default', [ split '/', $c->req->snippets->[-1] ] );
}
sub year : Regex('^(\d{4})(?:/(.*))?') {
my ( $self, $c ) = @_;
( $c->stash->{yr} ) = @{ $c->req->snippets };
$c->forward( '/default', [ split '/', $c->req->snippets->[-1] ] );
}
とかしなくちゃいけなくて(思い付かなくて) DRY すぎるのでなんとかしたい。
がんばればまとめられそうだけど、ううむ。
つか関係ないけど Regex コントローラはマッチした部分がコントローラの引数で飛んでくるって感じならいいのに。
Authentication::Credential::Flickr
作った。あとでドキュメント書いてでべろっぱりりーすでCPANにあぷする。
これ使うためには
Authentication
Authentication::Credential::Flickr
Session
Session::Store::FastMmap
Session::State::Cookie
と、いっぱいプラグインロードしなくちゃいけなくてなんかださい。
Catalyst::Plugin::XFramework
なんか流行ってるらしい!
package Catalyst::Plugin::XFramework;
sub finalize {
my $c = shift;
$c->res->header('X-Framework' => 'Catalyst/'.$c->version);
$c->NEXT::finalize(@_);
}
1;
こんな感じか。
$ HEAD http://localhost:3000/
200 OK
Connection: close
Date: Fri, 09 Dec 2005 16:43:26 GMT
Content-Length: 10981
Content-Type: application/xhtml+xml; charset=utf-8
Last-Modified: Fri, 09 Dec 2005 16:31:19 GMT
Client-Date: Fri, 09 Dec 2005 16:43:26 GMT
Client-Peer: 127.0.0.1:3000
Client-Response-Num: 1
Status: 200
X-Catalyst: 5.62
X-Framework: Catalyst/5.62