Template::Stash::AutoEscaping을 사용하기 위해 Dancer2 사이트에서 Template Toolkit의 기본 구성을 어떻게 수정합니까?Dancer2 및 Template Toolkit을 다른 Stash 모듈을 사용하도록 구성하는 방법
5
A
답변
6
구성 파일에 새 개체를 만드는 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
대신 새 하위 클래스를 사용할 수 있습니다. 이것은 당신이 당신의 설정 파일에 STASH
에 추가했을 수있는 구성을 잃게 만들 것입니다
engines:
template:
TemplateToolkit::AutoEscaping:
start_tag: '<%'
end_tag: '%>'
참고. 래퍼에서 명시 적으로 구성을 가져 와서 STASH
이 있으면 필터링하여 새 new
에 전달하십시오. 나는 그것을 독자를위한 운동으로 남겨 둘 것이다.