如何修改Dancer2站点中模板工具包的默认配置以使用Template::Stash::AutoEscaping
发布于 2017-10-09 19:54:01
显然,您不能编写在配置文件中创建新对象的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。我将把它作为练习留给读者。
https://stackoverflow.com/questions/46644866
复制相似问题