2017-10-09 9 views
5

का उपयोग करने के लिए डांसर 2 और टेम्पलेट टूलकिट को कैसे कॉन्फ़िगर कर सकता हूं Template::Stash::AutoEscaping का उपयोग करने के लिए मैं डांसर 2 साइट में टेम्पलेट टूलकिट की डिफ़ॉल्ट कॉन्फ़िगरेशन को कैसे संशोधित करूं?मैं एक अलग स्टैश मॉड्यूल

उत्तर

6

आप स्पष्ट रूप से पर्ल कोड नहीं लिख सकते हैं जो आपकी कॉन्फ़िगरेशन फ़ाइल में एक नई वस्तु बनाता है। इसके बजाय, मैं डांसर 2 :: टेम्पलेट :: टेम्पलेटटूलकिट क्लास को उप-वर्गीकृत करता हूं, वहां संशोधन करता हूं और उसके बाद इसका उपयोग करता हूं।

आप कोड को देखने या 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::Contextstash वस्तु को बदलने के लिए एक तरीका प्रदान नहीं करता है। ->stash विधि केवल एक पाठक है और इसे केवल रनटाइम पर सेट किया जा सकता है।

फिर आप template_toolkit के बजाय अपनी कॉन्फ़िगरेशन फ़ाइल में अपने नए उप-वर्ग का उपयोग कर सकते हैं।

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

ध्यान दें कि यह आप ढीला किसी भी विन्यास आप अपने कॉन्फ़िग फ़ाइल में STASH के लिए जोड़ दिया हो कर देगा। आपको अपने रैपर में कॉन्फ़िगरेशन को स्पष्ट रूप से पकड़ना होगा, STASH फ़िल्टर करें यदि कोई है और इसे new पर पास कर दें। मैं इसे पाठक के लिए एक अभ्यास के रूप में छोड़ दूंगा।

संबंधित मुद्दे