2016-05-19 5 views
6

मैं की तरह Symfony3 का उपयोग कर एक टहनी टेम्पलेट follwing:'देव' पर्यावरण के लिए अगर कथन का उपयोग करते समय ट्विग टेम्पलेट अज्ञात "डंप" फ़ंक्शन क्यों फेंकता है?

{% if app.environment == 'dev' %} 
    {{ dump(students) }} 
{% endif %} 

लेकिन 'prod' पर्यावरण यह var/लॉग/prod.log फ़ाइल में दिखाया गया है इस त्रुटि, फेंकता में:

[2016-05-18 21:28:28] अनुरोध। सीआरआईसीआईसीएल: अनकॉट PHP अपवाद Twig_Error_Syntax: में "अज्ञात" डंप "फ़ंक्शन 13 पर" search/search_pet_results.html.twig "। /var/www/html/petition/vendor/twig/twig/lib/Twig/ExpressionParser.php लाइन 573 {"अपवाद": "[ऑब्जेक्ट] (Twig_Error_Syntax (कोड: 0): अज्ञात \" डंप \ \ "खोज/search_pet_results.html.twig \" पंक्ति में 13. पर /var/www/html/petition/vendor/twig/twig/lib/Twig/ExpressionParser.phpoin73 पर) "} []

मेरे twig टेम्पलेट के लिए कोई सुझाव? पता नहीं क्या करना है, क्योंकि यह काम करने के लिए "माना" है।

+1

मुझे लगता है कि आपका पर्यावरण सही ढंग से सेट नहीं हो रहा है! क्या आपने उत्पादन में 'app.environment' उत्पादन करने की कोशिश की है? परिवर्तन यह dev पर सेट किया जाएगा :) – Phorce

+0

हाय वहाँ @Porce। जब मैं अपनी ट्विग फ़ाइल में '

एप्लिकेशन पर्यावरण: {{app.environment}}

' जोड़ता हूं, तो यह मेरे "app_dev.php" लिंक के लिए "एप्लिकेशन पर्यावरण: देव" दिखाता है, और मेरे नियमित प्रोड पर्यावरण के लिए यह "अनुप्रयोग पर्यावरण" : प्रोड "। –

उत्तर

3

डंप फ़ंक्शन डिफ़ॉल्ट रूप से उपलब्ध नहीं है, जैसा दस्तावेज़ here में वर्णित है। पर्यावरण को सक्षम करने के लिए आपको डीबग ध्वज को सही पर सेट करना होगा। ध्वज twig खंड के तहत config.yml फ़ाइलों में स्थित है। आमतौर पर मान कर्नेल मान से लिया जाता है।

config.yml

# Twig Configuration 
twig: 
    debug:   "%kernel.debug%" 

प्रयास करें के रूप में आदेश सभी वातावरण में सक्षम करने के लिए का पालन करें संशोधित:

config

तो शायद अपनी config.yml पालन में ही है .yml

# Twig Configuration 
twig: 
    debug:   true 

आशा है कि यह मदद

+0

हाय वहाँ Matteo। मदद के लिए धन्यवाद, लेकिन मैंने बदलाव किया और यह काम नहीं किया। मैंने देव और प्रोड वातावरण दोनों के लिए 'php bin/console cache: clear' भी चलाया। मेरे config.yml में भी मेरे पास 'tight_variables: "% kernel.debug%" 'twig: config के अंतर्गत है। –

+0

मुझे यह भी उल्लेख करना चाहिए कि '{{डंप (छात्र)}} 'मेरे' देव 'पर्यावरण में ठीक काम करता है; इसलिए इसे 'सक्षम' करने की आवश्यकता नहीं होनी चाहिए -> यदि आपका यही मतलब है। कोई अन्य सुझाव? मेरी समस्या "अगर" ठीक तरह से काम नहीं कर रही है। –

1

प्रोड वातावरण में त्रुटि प्रकट होती है क्योंकि डंप कॉल उपलब्ध नहीं है।

लेकिन आपको डीबग को सही पर सेट करने की आवश्यकता नहीं है, क्योंकि आप आमतौर पर प्रोड पर्यावरण में ऐसा नहीं करना चाहते हैं।
इस मुद्दे के लिए एक बहुत ही सरल और बेहतर कामकाज है।

सीधे dump() को कॉल करने के बजाय अगर ब्लॉक में केवल एक अलग ट्विग फ़ाइल शामिल है जिसमें dump() कॉल शामिल है।

परिवर्तन:

{% if app.environment == 'dev' %} 
    {{ dump(foo) }} 
{% endif %} 

में:

{% if app.environment == 'dev' %} 
    {% include 'dump.html.twig' %} 
{% endif %} 

dump.html.twig सामग्री:

{{ dump(foo) }} 
0

यह सवाल Check if a custom Twig function exists and then call it जो मैंने हाल ही में दिए के समान है।मैंने पाया कि Twig Twig_Error_Syntax अपवाद फेंकता है जब कोई फ़ंक्शन कॉल करने का प्रयास नहीं करता है, भले ही यह एक पहुंच योग्य if ब्लॉक के अंदर हो। तो बस आपके प्रश्न की तरह।

वास्तव में, Symfony's documentation of dumping कहते हैं एक ही:

डिजाइन करके, dump() समारोह उत्पादन में संवेदनशील जानकारी लीक से बचने के लिए dev और test के वातावरण में ही उपलब्ध है,। वास्तव में, पर्यावरण में dump() फ़ंक्शन का उपयोग करने का प्रयास करने के परिणामस्वरूप PHP त्रुटि हो जाएगी।

तो या तो अपनी ट्विग फ़ाइलों से सभी dump एस हटाएं या एक वर्कअराउंड बनाएं।

मैं dump सिवाय उत्पादन वातावरण में कुछ भी नहीं करना चाहते हैं - तो मैं dump नामक कस्टम टहनी समारोह है कि कुछ भी वापस नहीं करता है पैदा करेगा। एडिटर द्वारा उत्तर भी काम कर सकता है, लेकिन प्रत्येक डंप कॉल के लिए अलग-अलग फाइलें बनाना काफी बोझिल लगता है, कम से कम यदि आपने एक से अधिक स्थानों में dump का उपयोग किया है।

अफसोस की बात है, मुझे नहीं पता कि आपके कोडबेस के किस स्थान पर आपको उत्पादन वातावरण में उपयोग करने के लिए एक नया फ़ंक्शन जोड़ना चाहिए। लेकिन यहाँ बीफ है:

$twig = new Twig_Environment(/* ... */); 

// Pseudo code: check environment 
if ($environment !== 'dev' && $environment !== 'test') { 
    $twig->addFunction(new Twig_Function('dump', function() { 
     return null; 
    })); 
} 

// Or you can also check whether the `dump` function already exists 
if ($twig->getFunction('dump') === false) { 
    $twig->addFunction(new Twig_Function('dump', function() { 
     return null; 
    })); 
} 

तो आप सुरक्षित रूप से सभी के वातावरण में dump उपयोग कर सकते हैं; उत्पादन वातावरण में यह बस कुछ भी आउटपुट नहीं करता है बल्कि अपवाद भी नहीं फेंकता है।

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