Amon2で$c->render()をwrapした$c->auto_render()を作ってみた。
2014年7月4日
毎回$c->render()にテンプレート指定するのがアレなんで指定しなくて良いようにしてみた。
ま、$cに別のrenderを作って、その中から通常のrenderを呼ぶ感じで。
package MyApp; sub auto_render{ my ( $self, $stash ) = @_; # 呼び出し元取得 // $path = 'MyApp::Web::C::Root::index' my $path = (caller 1)[3]; # Root::indexだけにする // $path = 'Root::index' $path =~ s/MyApp::Web::C:://; # ::を/に // $path = 'Root/index' $path =~ s/\:\:/\//g; # 全部小文字に // $path = 'root/index' $path = lc $path; # renderを呼ぶ return $self->render($path . '.tt', $stash ); }
これで、$c->auto_renderが追加されました。
あとは、Cから呼ぶだけ。
sub index { my ( $class, $c, $args ) = @_; return $c->auto_render({}); }
これで毎回テンプレートを呼ばなくても呼び出し元からpathを作ってテンプレートを使える。
ただ、Root.pmの時は、tmpl/index.ttじゃなくて、tmpl/root/index.ttになる。。
このくらいなら分岐するまでもないので、tmpl/rootを作った。