2017-01-11 8 views
9

Twig 2.0 में अपग्रेड करने के बाद से मुझे त्रुटि संदेश Accessing Twig_Template attributes is forbidden मिलता है। निर्दिष्ट पंक्ति में या तो {{ include }} या मैक्रो कॉल शामिल है।ट्विग 2.0 त्रुटि संदेश "Twig_Template विशेषताओं तक पहुंच प्रतिबंधित है"

उत्तर

14

टहनी 2.0 में {{ import }} 'एड मैक्रो अब और बच्चे टेम्पलेट्स के लिए लागू नहीं हो जाते, देख https://github.com/twigphp/Twig/issues/2336

समाधान: आप हर एक .twig फ़ाइल में आवश्यक मैक्रो (रों) आयात करने की आवश्यकता।

यदि त्रुटि {{ include }} या {{ extends }} वाली रेखा पर दिखाई दे रही है, तो आपको उस टेम्पलेट को देखना होगा जिसमें शामिल/विस्तारित किया गया है, और वहां मैक्रो आयात करें।

0

आप अपने मैक्रो का उपयोग कर टहनी फ़ाइलों का एक बहुत कुछ है, तो यह हो सकता है आसान और कम त्रुटि प्रवण को a Twig Extension के माध्यम से वैश्विक टहनी कार्यों को परिभाषित। इस तरह आपको प्रत्येक फ़ाइल में मैक्रोज़ आयात करने की आवश्यकता नहीं है (जिसे शायद भविष्य के ट्विग संस्करण में ठीक किया जाएगा)।

उदाहरण के लिए, जब मैं

{% macro error(message, dismissible=true) %} 
    {# Error display code #} 
{% endmacro %} 

मैं अब एक टहनी एक्सटेंशन में परिभाषित किया है था UtilitiesExtension बुलाया निम्नलिखित फंक्शन:

public function getFunctions() 
    { 
     return array(
      // ... 
      new \Twig_SimpleFunction('error', array($this, 'error')), 
     ); 
    } 

    public function error($message, $dismissible = true) { 
     return $this->twig->render('patterns/utils/error.html.twig', [ 
      'text' => $message, 
      'limit' => $dismissible, 
     ]); 
    } 

फिर आप समारोह नाम के साथ अपने मैक्रो कॉल प्रतिस्थापित करने की आवश्यकता ; ध्यान दें कि आप फ़ंक्शन नामों में डॉट्स का उपयोग नहीं कर सकते हैं।

यह समाधान साफ़ है क्योंकि ट्विग मैक्रोज़ को PHP फ़ंक्शंस के बराबर माना जाता है। बेशक यह आपकी जरूरतों के अनुरूप अनुकूलित किया जाना चाहिए।

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