在Catalyst / TT中内联模板

时间:2012-05-07 06:08:48

标签: perl catalyst

我想知道是否有人知道如何在Catalyst中的模块的DATA部分中内联模板(我想使用模板工具包),就像在Mojolicious中看起来可能的那样,你可以做这样的事情(来自文档) ):

# /bar
get '/bar' => sub {
     my $self = shift;
     $self->stash(one => 23);
     $self->render('baz', two => 24);
};

__DATA__

@@ baz.html.ep
The magic numbers are <%= $one %> and <%= $two %>.

虽然我可能会稍后将所有内容移动到单独的文件中,但它可以让我更轻松地进行维护。

谢谢,

西蒙

1 个答案:

答案 0 :(得分:4)

概念证明:

package Foo::Bar::Controller::Root;
use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Controller' }
use Inline::Files;
use Template;
__PACKAGE__->config(namespace => '');
sub end :ActionClass('RenderView') {
    my ($self, $c) = @_;
    my $in = readline $c->stash->{template};
    my $tt = Template->new;
    my $out;
    $tt->process(\$in, $c->stash, \$out) or die $tt->error;
    $c->response->body($out);
}
sub bar :Path {
    my ($self, $c) = @_;
    $c->stash(template => 'BAZ', one => 23, two => 24);
}
__PACKAGE__->meta->make_immutable;
1;

__END__

__BAZ__
The magic numbers are [% one %] and [% two %].

它有效,但我不推荐它。这是一个严重违反MVC原则的催化剂建立在上面。