加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:26:50 所属栏目:大数据 来源:网络整理
导读:如何在Dancer2站点中修改Template Toolkit的默认配置以使用 Template::Stash::AutoEscaping? 解决方法 显然,您不能编写在配置文件中创建新对象的Perl代码.相反,我会继承Dancer2 :: Template :: TemplateToolkit类,在那里进行修改,然后使用它. 如果您查看代
如何在Dancer2站点中修改Template Toolkit的默认配置以使用 Template::Stash::AutoEscaping?

解决方法

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

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

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方法只是一个读者,它只能在运行时设置.

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

engines:
  template:
    TemplateToolkit::AutoEscaping:
      start_tag: '<%'
      end_tag:   '%>'

请注意,这将使您放弃在配置文件中为STASH添加的任何配置.您必须在包装器中明确地获取配置,如果存在则过滤掉STASH并将其传递给新的.我将把它作为读者的练习.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读