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を作った。