Catalyst入門としてのお作法についてについて
ひげぽん OSとか作っちゃうかMona- - Catalyst入門 と お作法についてはてなのひげぽんさんがCatalystについて書いていたのでそれを受けて書いてみます。上記のこれは、root/base/の中に読み込みたいincludeファイルを入れてやると、それがTTのINCLIDE_PATHに入っているので [% include username.tt %]で読み込めるようになります。Catalyst::View::TTの103行目付近にその記述があります。ちなみに、テンプレートの中にデフォルトで使えるようになってる変数はbase($c->req->base), c($c), name($c->config->{name})の3つのようですね。なので自分はProject.pmのsub end {}で、$c->stash->{session} = $c->sessionとやって、セッションをテンプレートで[% session.foo %]とできるようにしています。別にやらんでも[% c.session.foo %]で取れますけどね…。
templateの include
rootからのパスを指定してやればよい
[% include templates/user/username.tt %]
その他で自分がやってるのとしたら下記ですね。
- M(Model)などでconfigの値を取りたいとき
下記のような感じで取れます。
Project->config->{foo}
Project.pmの中で
use Catalyst qw/Config::YAML/; Project->config(config_file => 'config.yml');
とすれば、configをconfig.ymlというファイル名にしてYAMLで設定を書くことができます。これ自分としては結構便利です。
作ってるアプリの中でグローバルに使いたいんだけどforwardしたくねーよというときには一番上のProject.pmに下記の要に書くとそれを$c->is_post_requestという感じで使うことができるようです。
sub Project::is_post_request { $_[0]->req->method eq 'POST' }
Catalystを使って自分でアプリを作っていたら、Utils.pmとConstants.pmがどうしてもMVCのどれかのディレクトリに入れることができず、結局Project::Utils、Project::Constantsという形にした。useするのがちょと面倒(オイオイ)だけどしかたない。
アプリをUTF-8で作ってるけどターミナルはeucなんで、ログで出てくる文字が化けるよ!というときに下記のようにするとeucで出力できるようになる。
これを使えば、他にもいろいろな処理を挟むことができると思う。これは主に開発時用のTipsですね。
sub Catalyst::Log::_log { my $self = shift; my $level = shift; my $time = localtime(time); my $message = join( "\n", @_ ); printf( STDERR "[%s] [catalyst] [%s] %s\n", $time, $level, Unicode::Japanese->new($message)->euc ); }
自分で気がついたのはこのくらいですけど、たぶん間違いとかこうやった方がよいというのが沢山ありそうなので、その際はご指摘お願いします。