Ceb*_*yre 5 perl template-toolkit dancer
如何修改Dancer2站点中Template Toolkit的默认配置以使用Template :: Stash :: AutoEscaping?
显然,您不能编写在配置文件中创建新对象的Perl代码.相反,我会继承Dancer2 :: Template :: TemplateToolkit类,在那里进行修改,然后使用它.
如果查看代码或D2 :: T :: TT,您可以看到它创建并返回$tt
方法中的对象_build_engine
.如果将它包装在around
子类中,则可以抓取它并进行更改.
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;
Run Code Online (Sandbox Code Playgroud)
这是一个丑陋的黑客攻击,并且在类的内部进行翻译从来都不是一个好主意,但是然后Template :: Context不提供更改stash
对象的方法.该->stash
方法只是一个阅读器,它只能在运行时设置.
然后,您可以在配置文件中使用新的子类而不是template_toolkit
.
engines:
template:
TemplateToolkit::AutoEscaping:
start_tag: '<%'
end_tag: '%>'
Run Code Online (Sandbox Code Playgroud)
请注意,这将使您放弃STASH
在配置文件中添加的任何配置.您必须在包装器中明确地获取配置,过滤掉STASH
是否有一个并将其传递给新的new
.我将把它作为读者的练习.