twig

2012-11-07 15 views
21

में एक कस्टम फ़ंक्शन का उपयोग करके मेरे टेम्पलेट में मैं सर्वर टाइमज़ोन आउटपुट करना चाहता हूं।twig

मेरे टेम्पलेट कि बंडल के लिए services.yml config में तरह

{{ getservertimezone }} 

कुछ तो है मैं

my.twig.extension: 
    class: My\WebsiteBundle\Extensions\Twig\SomeTemplateHelper 
    tags: 
      - { name: twig.extension } 

है और मेरे SomeTemplateHelper तरह

namespace My\WebsiteBundle\Extensions\Twig; 

class SomeTemplateHelper extends \Twig_Extension 
{ 

    public function getFilters() 
    { 
     return array(
      'getservertimezone' => new \Twig_Filter_Method($this, 'getServerTimeZone'), 
     ); 
    } 


    public function getServerTimeZone() 
    { 
     if (date_default_timezone_get()) { 
      return date_default_timezone_get(); 
     } else if (ini_get('date.timezone')) { 
      return ini_get('date.timezone'); 
     } else { 
      return false; 
     } 
    } 

    public function getName() 
    { 
     return 'some_helper'; 
    } 

} 

लेकिन मैं कर सकते हैं लग रहा है इस विधि को तब तक कॉल न करें जब तक यह फ़िल्टर {{ someval | getservertimezone }} फ़िल्टर की तरह उपयोग न हो, क्या कोई तरीका नहीं है ओ सिर्फ एक स्ट्रैघ {{ getservertimezone() }} कॉल करें?

उत्तर

36

उपयोग getFunctions()getFilters()

public function getFunctions() 
{ 
    return array(
     new \Twig_SimpleFunction('server_time_zone', array($this, 'getServerTimeZone')), 
    ); 
} 

टहनी फिल्टर के बजाय कुछ मूल्य फिल्टर करने के लिए उपयोग किया जाता है।

{{ "some value" | filter_name_here }} 

बीटीडब्ल्यू, आप एक ही कक्षा में दोनों फ़िल्टर और कार्यों को परिभाषित कर सकते हैं।

+1

Twig_Function_Method को इसके बजाय Twig_SimpleFunction का उपयोग बहिष्कृत किया गया है। मैं symfony डॉक्टर पर एक मुद्दा खोलता हूं https://github.com/symfony/symfony-docs/issues/3275 – gagarine

+0

@gagarine निश्चित –

6

getFilters के बजाय getFunctions ओवरराइड करें और Twig_Filter_Method के बजाय Twig_Function_Method का उपयोग करें।

5

वह Twig_Function_Method और Twig_Filter_Method के बजाय Twig_SimpleFilter के बजाय Twig_SimpleFunction का उपयोग करना चाहिए टहनी के नए संस्करण में, टहनी के बाद से _ * _ विधि (साथ मैं टहनी v उपयोग कर रहा हूँ। 1.24.0 Symfony 2.8.2) के साथ अनुचित हैं

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