2012-05-07 151 views
0

我想知道是否有人知道如何联模板在催化剂模块的数据部分(我想使用模板工具包),喜欢它在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

概念证明:

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原则上的严重违反。

+1

我不认为这是滥用MVC原则。另一方面,我认为这不是一个特别好的想法:)早/小项目破解,是的。作为一种标准的做事方式,并不是那么棒。 – singingfish

+0

非常感谢。在此期间我也尝试过Data :: Section :: Simple。我同意 - 尝试后 - 在尝试事情的早期阶段是很棒的,但我不想为任何超过10行的模板保留这种方式。 – simone