5
我将如何修改模板工具包的默认配置在Dancer2网站利用Template::Stash::AutoEscaping?如何配置Dancer2和模板工具包使用不同的藏匿模块
我将如何修改模板工具包的默认配置在Dancer2网站利用Template::Stash::AutoEscaping?如何配置Dancer2和模板工具包使用不同的藏匿模块
你显然不能写在配置文件中创建一个新对象Perl代码。相反,我将继承Dancer2 :: Template :: TemplateToolkit类,进行修改,然后使用它。
如果您看代码或D2::T::TT,您可以看到它创建并返回方法_build_engine
中的$tt
对象。如果你在你的子类中包装这个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;
这是一个有点丑陋的黑客攻击,并在一个类的内部翻找是不是一个好主意,但随后Template::Context不提供一种方法来改变stash
对象。方法->stash
只是一个读者,它只能在运行时设置。
然后,您可以使用您的新的子类在你的配置文件,而不是template_toolkit
。
engines:
template:
TemplateToolkit::AutoEscaping:
start_tag: '<%'
end_tag: '%>'
注意,这会让你失去你可能在你的配置文件中添加了STASH
任何配置。你必须明确地抓住你的包装中的配置,如果有的话过滤出STASH
并将它传递给新的new
。我将把它作为读者的练习。