2012-03-03 9 views
13

से टेम्पलेट प्रस्तुत करें मैंने कुछ चीजों को करने के लिए एक टवीग एक्सटेंशन बनाया है और उनमें से एक टेम्पलेट प्रस्तुत कर रहा है। इंजन इंजन के जुड़वां विस्तार के अंदर से मैं कैसे पहुंच सकता हूं और रेंडर विधि को कॉल कर सकता हूं?टवीग एक्सटेंशन

उत्तर

35

एक टहनी विस्तार करने के लिए टहनी पर्यावरण उदाहरण पारित कर सकते हैं इतना है कि यह वातावरण की जरूरत है आप विस्तार परिभाषित कर सकते हैं। टवीग स्वचालित रूप से इसे फ़ंक्शन पर पास कर देगा।

public function getFunctions() 
{ 
    return array(
     new \Twig_SimpleFunction(
      'myfunction', 
      array($this, 'myFunction'), 
      array('needs_environment' => true) 
     ), 
    ); 
} 

public function myFunction(\Twig_Environment $environment, string $someParam) 
{ 
    // ... 
} 
+4

\ Twig_Function_Method को बहिष्कृत किया गया है, \ Twig_SimpleFunction – spectralsun

19

इस समारोह उपयोगकर्ता का उपयोग

private $environment; 

public function initRuntime(\Twig_Environment $environment) 
{ 
    $this->environment = $environment; 
} 
+4

के साथ काम फिर $ कर जोड़ दिया है:

मैं भी सिम्फोनी सेवा के रूप में वर्ग पंजीकृत कर लिया है यह-> पर्यावरण-> प्रस्तुत करें() – ojreadmore

+4

initRuntime अब बहिष्कृत है। @tvlooy द्वारा need_environment सही जवाब है। – MECU

5

@tvlooy उत्तर मुझे एक संकेत दें लेकिन मेरे लिए काम नहीं किया। क्या मैं इसे प्राप्त करने के लिए करने की जरूरत है:

namespace AppBundle\Twig; 


class MenuExtension extends \Twig_Extension 
{ 
    public function getName() 
    { 
     return 'menu_extension'; 
    } 

    public function getFunctions() 
    { 
     return [ 
      new \Twig_SimpleFunction('myMenu', [$this, 'myMenu'], [ 
       'needs_environment' => true, 
       'is_safe' => ['html'] 
      ]) 
     ]; 
    } 

    public function myMenu(\Twig_Environment $environment) 
    { 
      return $environment->render('AppBundle:Menu:main-menu.html.twig'); 
    } 
} 

मैं addtionaly 'is_safe' => ['html'] जोड़ने की जरूरत HTML के autoescaping से बचने के लिए। TWIG टेम्पलेट में

app.twig.menu_extension: 
    class: AppBundle\Twig\MenuExtension 
    public: false 
    tags: 
     - { name: twig.extension } 

मैं {{ myMenu() }}

मैं "twig/twig": "~1.10" और Symfony 3.1.3 संस्करण

+0

'need_environment' => सच का असली सौदा उपयोग करें। +1 –

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