Catalyst::View::Tmplatedとstashの関係
Catalystのstashをグローバル変数的に使うのは - Charsbar::Note
ビューのテンプレート設定とかもそう。古くさいC::V::TTではstash経由でテンプレを渡しているけど、新しいC::V::Templated ベースのものはstashなんぞ通さず、$c->view(...)->template('template')のような形で直接指定できるようになっている。
これはいいですね。
jrockwayがC::M::Adaptorに続き、Viewまで汎用化してくれました。
で、C::V::Templatedとstashの関係ですが、ちらっとソースを見てみるとtemplateメソッドでテンプレートを渡すようになったけどstashを使ってないわけではないんですね。
templateメソッドの実装を見ると
$self->context->stash($self->_ident() => $template);
となってて、しっかりstashを使ってますが、stash名を決定する_identメソッドをのぞくと
sub _ident { # secret stash key for this template' return '__'. ref($_[0]). '_template'; }
となっているので、例えばMyApp::View::TTってパッケージで使うとstash名は
__MyApp::View::TT_template
ってなるので、普通はバッティングしないだろってことですね。
スコープ的には相変わらずグローバルっぽいけど名前規則でそれを回避してるわけですね。
っつーわけでControllerやViewでstashを使わざるを得ないんだったら、全部この方法にすればいいんじゃないだろか。