से टेम्पलेट प्रस्तुत करें मैंने कुछ चीजों को करने के लिए एक टवीग एक्सटेंशन बनाया है और उनमें से एक टेम्पलेट प्रस्तुत कर रहा है। इंजन इंजन के जुड़वां विस्तार के अंदर से मैं कैसे पहुंच सकता हूं और रेंडर विधि को कॉल कर सकता हूं?टवीग एक्सटेंशन
उत्तर
एक टहनी विस्तार करने के लिए टहनी पर्यावरण उदाहरण पारित कर सकते हैं इतना है कि यह वातावरण की जरूरत है आप विस्तार परिभाषित कर सकते हैं। टवीग स्वचालित रूप से इसे फ़ंक्शन पर पास कर देगा।
public function getFunctions()
{
return array(
new \Twig_SimpleFunction(
'myfunction',
array($this, 'myFunction'),
array('needs_environment' => true)
),
);
}
public function myFunction(\Twig_Environment $environment, string $someParam)
{
// ...
}
इस समारोह उपयोगकर्ता का उपयोग
private $environment;
public function initRuntime(\Twig_Environment $environment)
{
$this->environment = $environment;
}
के साथ काम फिर $ कर जोड़ दिया है:
मैं भी सिम्फोनी सेवा के रूप में वर्ग पंजीकृत कर लिया है यह-> पर्यावरण-> प्रस्तुत करें() – ojreadmore
initRuntime अब बहिष्कृत है। @tvlooy द्वारा need_environment सही जवाब है। – MECU
@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 संस्करण
'need_environment' => सच का असली सौदा उपयोग करें। +1 –
\ Twig_Function_Method को बहिष्कृत किया गया है, \ Twig_SimpleFunction – spectralsun