2006年11月26日

stashとconfig

Catalystでの話。

$c->configには普通ConfigLoaderなどで初期値のみを入れて読み出しのみでしか使いませんが、実はこの値、上書き可能だったりします。

そうすると、$c->stashの様にグローバル値として使えるのですが、注意しないといけないのが、この値はstashと異なり、呼び出し単位で初期化されないと言うことです。

まぁ、Catalystのアプリのどこかに

die ++$c->stash->{'test'};
die ++$c->config->{'test'};
のそれぞれを埋め込んで動作を確認して頂ければ解ると思いますが、stashが呼び出しごとに初期化されて必ず1が返るのに対して、configの方ではどんどん数字が増えていきます。
(ただし、サーバ側でアプリが常駐しない仕様になっているとこちらも1になるかと思います)

なら、ちゃんとstashとconfigを使い分ければいいじゃないという話になるのですが、YAMLに記載されたconfig値を読み込んでから加工して戻したいと言った用途の際に困ります。
(たとえばURLリストにベースパスを付加して戻したいと言った用途の場合)

まぁ、戻すときにconfig出はなくstashに戻してそちらを用いる手や使うところで毎回ベースパスを追加すると言う手もあるのですが、せっかく一度読み込んだらその後常駐終了まで保持してくれる値を何度も計算したくないので、こういう場合は自作のPulginを作成してそれのsetupメソッドにconfigの値を操作させれば一度しか呼び出されないので楽です。

あと、自作プラグインはlib/MyApp以下に置くと自動認識されてしまってちゃんと動作しないので、ライブラリのサーチパスのどこかに置いて頭に「+」をつけてモジュール名で指定すると良いみたいです。

と言うか、ここら辺の仕掛けは↓のリンク先を読むのが手っ取り早いです。

Catalystでちゃんとしたアプリ作るのならこれを読んでおいた方が良いと思います。

Posted by Takuchan at 2006年11月26日 22:17 | トラックバック(0)