首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置Dancer2和Template Toolkit以使用不同的Stash模块

如何配置Dancer2和Template Toolkit以使用不同的Stash模块
EN

Stack Overflow用户
提问于 2017-10-09 18:59:58
回答 1查看 255关注 0票数 5

如何修改Dancer2站点中模板工具包的默认配置以使用Template::Stash::AutoEscaping

EN

回答 1

Stack Overflow用户

发布于 2017-10-09 19:54:01

显然,您不能编写在配置文件中创建新对象的Perl代码。相反,我会子类化Dancer2::Template::TemplateToolkit类,在那里进行修改,然后使用它。

如果查看代码或D2::T::TT,就会看到它在方法_build_engine中创建并返回$tt对象。如果您将其包装在子类的around中,则可以获取它并进行更改。

代码语言:javascript
复制
package Dancer2::Template::TemplateToolkit::AutoEscaping;

use Moo;
use Template::Stash::AutoEscaping;

extends 'Dancer2::Template::TemplateToolkit';

around '_build_engine' => sub {
    my $orig = shift;
    my $self = shift;

    my $tt = $self->$orig(@_);

    # replace the stash object
    $tt->service->context->{STASH} = Template::Stash::AutoEscaping->new;

    return $tt;
};

1;

这是一种丑陋的技巧,在类的内部进行查找从来都不是一个好主意,但是Template::Context没有提供更改stash对象的方法。->stash方法只是一个读取器,它只能在运行时设置。

然后,您可以在配置文件中使用新的子类,而不是template_toolkit

代码语言:javascript
复制
engines:
  template:
    TemplateToolkit::AutoEscaping:
      start_tag: '<%'
      end_tag:   '%>'

请注意,这将使您丢失在配置文件中为STASH添加的任何配置。您必须显式地获取包装器中的配置,过滤掉STASH (如果有),并将其传递给新的new。我将把它作为练习留给读者。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46644866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档