Mojolicious アプリで Template::Toolkit つかいたいので、適当に実験してみた。
[% c.uri_for %] が適切に処理されるところまでは出来た。
どうするのがいいんでしょうか。良い方法あれば動くコードで教えてください!
charsbar さんに、MojoX::Renderer::TT を教えていただきました。Mojolicious アプリで Template::Toolkit をデフォルトのレンダラとして使う (解決編) - blog.woremacx.com をご覧ください。
package Vagina; use strict; use warnings; use base 'Vagina::Base'; # This method will run for each request sub dispatch { (ry } # This method will run once at server start sub startup { (ry } 1;
package Vagina::Base; use strict; use warnings; use base 'Mojolicious'; use Vagina::Renderer; use Vagina::Types; __PACKAGE__->attr('renderer', chained => 1, default => sub { Vagina::Renderer->new } ); __PACKAGE__->attr('types', chained => 1, default => sub { Vagina::Types->new } ); 1;
package Vagina::Renderer; use strict; use warnings; use base 'MojoX::Renderer'; use Template; sub new { my $self = shift->SUPER::new(@_); $self->default_ext('tt'); $self->add_handler(tt => sub { my ($self, $c, $path) = @_; my $tt = Template->new({ABSOLUTE => 1}) or die $Template::ERROR; my $output; $path = $path; $tt->process($path, $c, \$output) or die $tt->error; return $output; }); return $self; } 1;
package Vagina::Types; use strict; use warnings; use base 'MojoX::Types'; sub new { my $self = shift->SUPER::new(@_); $self->types({tt => 'text/html'}); $self; } 1;

Leave a comment