Catalyst模板工具包包装器不适用于Root控制器

时间:2013-11-13 03:01:55

标签: perl catalyst template-toolkit

我在myapp :: View :: TT.pm

上设置了包装器
__PACKAGE__->config(
    TEMPLATE_EXTENSION => '.tt2',
    WRAPPER => 'wrapper.tt2',
    INCLUDE_PATH => [ha->path_to('root', 'src'),],
    render_die => 1,
    TIMER => 0,
);

然后使用此内容创建wrapper.tt2

[% IF no_wrapper; 
        debug("Passing $template.name  without any wrapper");
        content;
    ELSE;
        wrapper = wrapper || 'site_wrapper.tt2';
        debug("Applying $wrapper to $template.name");
        content WRAPPER $wrapper;
    END;
%]

然后,在管理员控制器中我写了

sub begin :Private {
    my ($self, $c) = @_;

    $c->stash( wrapper => 'admin/admin_wrapper.tt2');
}

这很好。

但是在根控制器中,我无法设置Wrapper并且没有包装器。 我有包装器site_wrapper.tt2,但我无法使用它。

在Root控制器中我有

sub begin :Private {
    my ($self, $c) = @_;

    $c->stash( wrapper => 'site_wrapper.tt2');
}


    sub index :Path :Args(0) {
        my ( $self, $c ) = @_;

        # Hello World
        $c->response->body( "ok" );
    } 

并且那只输出“ok”。 我怎样才能在Root上使用包装器?

感谢。

2 个答案:

答案 0 :(得分:1)

通过将某些内容放入$ c-> response-> body(),您可以覆盖任何模板处理。就WRAPPER指令而言,我认为你所做的事情本质上没有任何错误。

答案 1 :(得分:0)

试试这个

    sub index :Path :Args(0) {
    my ( $self, $c ) = @_;

    $c->stash->{'template'}='some/whre/aTemplate.tt2';
    $c->stash->{'message'}="Hello world";
    $c->forward('View::TT') 
}

我认为开始时不需要$c->stash( wrapper => 'site_wrapper.tt2');。 配置视图后,您将创建的每个模板都将包含您的包装器。