0

我想知道是否有人知道如何在 Catalyst 的模块的 DATA 部分中内联模板(我想使用 Template Toolkit),就像在 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 %>.

它使我在编写代码时更容易维护,尽管稍后我可能会将所有内容移动到单独的文件中。

谢谢,

西蒙妮

4

1 回答 1

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 %].

它有效,但我不能推荐它。这严重违反了 Catalyst 所基于的 MVC 原则。

于 2012-05-07T08:12:45.247 回答