कैसे twig टेम्पलेट्स में var_dump चर?


156

लेयर पैटर्न देखें जहां आप केवल वही प्रस्तुत करते हैं जो आपको दिया गया है, ठीक है और सभी है, लेकिन आप कैसे जानते हैं कि क्या उपलब्ध है? TWIG में एक "सूची सभी परिभाषित चर" कार्यक्षमता है? क्या एक चर को डंप करने का एक तरीका है?

इसका हल मुझे खोजकर मिला, एक ऐसे फंक्शन को परिभाषित करने के लिए जहां मैं एक फंक्शन को इंजेक्ट करके अपने मौजूदा php डिबग टूल्स का उपयोग कर सकता हूं , लेकिन मैंने जो भी संदर्भ पाया है, उसमें कोड की ये दो अच्छी लाइनें शामिल हैं, लेकिन कहीं भी यह निर्दिष्ट नहीं है कि कहां होना है उनको रखो। इस तथ्य के कारण कि उन्हें $ लोडर चर की आवश्यकता है , मैंने /app/config/autoload.php की कोशिश की, लेकिन $ लोडर गलत तरह का था। मैं टहनी फ़ंक्शन जोड़ने के लिए php कोड कहां रखूं?

जवाबों:


251

ट्विग 1.5 के रूप में, सही उत्तर डंप फ़ंक्शन का उपयोग करना है। यह पूरी तरह से ट्विग डॉक्यूमेंटेशन में प्रलेखित हैयहाँ Symfony2 के अंदर इसे सक्षम करने के लिए प्रलेखन है।

{{ dump(user) }}

3
BTW, रिलेशनल मैपिंग के साथ वस्तुओं को डंप करते समय सावधान रहें
pleerock

14
जब मैं {{ dump() }}सभी चर को डंप करने के लिए उपयोग करता हूं , तो यह एक खाली पृष्ठ लौटाता है। क्या चर को डंप करने का कोई अन्य तरीका है?
जेरी फाम

मैं सिम्फनी 2.5 के नवीनतम संस्करण का उपयोग कर रहा हूं, और देव परिवेश के लिए कर्नेल लोड करते समय config.yml और config_dev.yml सेटअप और डीबग मोड चालू है। मैंने नीचे मोरलैंड द्वारा बताए गए अन्य मैनुअल तरीकों की कोशिश की है। किसी भी तरह, मुझे एक खाली पृष्ठ भी मिलता है जब डंप का उपयोग किया जाता है। और डंप नहीं।
चाडविक मेयर

यदि आपको इसके साथ और बिना एक रिक्त पृष्ठ मिलता है dump, तो जाहिर dumpहै समस्या नहीं है। मैं एक नया सवाल पोस्ट करने का सुझाव दूंगा यदि आप इसे अन्यथा नहीं समझ सकते।
Icode4food

1
मुझे निम्नलिखित त्रुटि मिलती है: `Twig_Error_Syntax - अज्ञात" डंप "फ़ंक्शन '
Pathros

28

आप उस debugटैग का उपयोग कर सकते हैं , जो यहां प्रलेखित है

{% debug expression.varname %}

संपादित करें: Twig 1.5 के रूप में, इसे हटा दिया गया है और नए dumpफ़ंक्शन के साथ बदल दिया गया है (ध्यान दें, यह अब एक फ़ंक्शन है और अब एक टैग नहीं है)। इसे भी देखें: ऊपर दिया गया स्वीकृत उत्तर


7
यदि आपको यह कहते हुए कोई त्रुटि मिलती है Unknown tag name "debug", तो अपना कॉन्फ़िगरेशन (या तो वैश्विक config.ymlया config_dev.yml) यहां बताए अनुसार बढ़ाएं
फ्लू

5
इस विधि को ट्विग 1.5 के रूप में चित्रित किया गया है।
21

4
उत्तर के लिए एक पदावनति नोट जोड़ा गया।
21

17

इसलिए मुझे यह काम करना पड़ा, आंशिक रूप से थोड़ा हैकिश:

  1. सेट twig: debug: 1मेंapp/config/config.yml
  2. इसे config_dev.yml में जोड़ें

    services:
        debug.twig.extension:
            class: Twig_Extensions_Extension_Debug
            tags: [{ name: 'twig.extension' }]
    
  3. sudo rm -fr app/cache/dev

  4. के बजाय अपने स्वयं के डिबग फ़ंक्शन का उपयोग करने के लिए print_r(), मैंने खोला vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.phpऔर बदल print_r(दियाd(

पुनश्च। मैं अब भी जानना चाहूंगा कि फिल्टर और एक्सटेंशन को जोड़ने के लिए $ ट्विग माहौल को कैसे / कहां से पकड़ा जाए।


1
btw: कैश को साफ़ करने के लिए आप कंसोल टूल ( stackoverflow.com/questions/6789950/… )
Raffael

क्या ऐसा करने का कोई फायदा है?
अलेक्जेंडर मॉरलैंड

यह अधिक सरल है ... यदि आप कंसोल टूल को नहीं जानते हैं, तो मैं आपको इसकी जांच करने की सलाह देता हूं
राफेल

3
आपको twig: debug: 1यह निर्धारित नहीं करना चाहिए क्योंकि यह जानकारी आपके फ्रंट कंट्रोलर के वातावरण से विरासत में मिली है। अन्यथा आप अनजाने में डिबगिंग जानकारी को अपने उत्पादों के वातावरण में समाप्त कर सकते हैं। जब तक आप देव वातावरण में काम कर रहे होते हैं तब तक यह डिफ़ॉल्ट रूप से सक्षम हो जाता है और यह आपके ठंढे वातावरण में अक्षम हो जाता है।
फ्लू

1
यह ट्विग 1.5 के रूप में पुराना है। अन्य उत्तर देखें: stackoverflow.com/a/10080404/107768
Icode4food

14

यदि आप एक घटक के रूप में अपने आवेदन में ट्विग का उपयोग कर रहे हैं, तो आप ऐसा कर सकते हैं:

$twig = new Twig_Environment($loader, array(
    'autoescape' => false
));

$twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));

फिर अपने टेम्पलेट्स में:

{{ my_variable | var_dump }}

उन लोगों को कहां रखें / प्रतिस्थापित करें $twig = new Twig_Environment($loader, array(...?
पॉलग्राफिक

5

यदि आप टहनी को एक स्टैंडअलोन घटक के रूप में यहाँ उपयोग कर रहे हैं, तो डिबगिंग को सक्षम करने के कुछ उदाहरण हैं क्योंकि यह डंप (चर) फ़ंक्शन को सीधे बॉक्स से बाहर काम नहीं करेगा।

स्टैंडअलोन

यह icode4food द्वारा दिए गए लिंक पर पाया गया था

$twig = new Twig_Environment($loader, array(
    'debug' => true,
    // ...
));
$twig->addExtension(new Twig_Extension_Debug());

Silex

$app->register(new \Silex\Provider\TwigServiceProvider(), array(
    'debug' => true,
    'twig.path' => __DIR__.'/views'
));

5

सभी कस्टम चर को डंप करें:

<h1>Variables passed to the view:</h1>
{% for key, value in _context %}
    {% if key starts with '_' %}
    {% else %}
        <pre style="background: #eee">{{ key }}</pre>
        {{ dump(value) }}
    {% endif %}
{% endfor %}

आप मेरे प्लगइन का उपयोग कर सकते हैं जो आपके लिए ऐसा करेगा (आउटपुट को अच्छी तरह से प्रारूपित करेगा):

टहनी डंप बार


अच्छा स्निपेट। धन्यवाद। यह मेरे लिए काम करता है अगर मैं मूल्य के साथ डंप (मूल्य) को प्रतिस्थापित करता हूं | var_dump
Matthijs koevoets

3

{{ dump() }}मेरे लिए काम नहीं करता है। PHPchokes। घोंसले का स्तर बहुत गहरा मुझे लगता है।

आप वास्तव में इस तरह से एक एक्सटेंशन debugका उपयोग कर रहे हैं, तो आप सभी को Twig टेम्पलेट्स की जरूरत है ।debugger

फिर यह एक ब्रेकपॉइंट स्थापित करने और {{ inspect() }}जहां भी आपको आवश्यकता हो, कॉल करने की बात है। आपको {{ dump() }}अपने डिबगर में समान जानकारी मिलती है ।


3

सिम्फनी> = 2.6 के बाद से, एक अच्छा VarDumper घटक है, लेकिन यह Twig के dump()फ़ंक्शन द्वारा उपयोग नहीं किया जाता है ।

इसे अधिलेखित करने के लिए, हम एक एक्सटेंशन बना सकते हैं:

निम्नलिखित कार्यान्वयन में, नामस्थानों को बदलना न भूलें।

Fuz/AppBundle/Resources/config/services.yml

parameters:
   # ...
   app.twig.debug_extension.class: Fuz\AppBundle\Twig\Extension\DebugExtension

services:
   # ...
   app.twig.debug_extension:
       class: %app.twig.debug_extension.class%
       arguments: []
       tags:
           - { name: twig.extension }

Fuz/AppBundle/Twig/Extension/DebugExtension.php

<?php

namespace Fuz\AppBundle\Twig\Extension;

class DebugExtension extends \Twig_Extension
{

    public function getFunctions()
    {
        return array (
              new \Twig_SimpleFunction('dump', array('Symfony\Component\VarDumper\VarDumper', 'dump')),
        );
    }

    public function getName()
    {
        return 'FuzAppBundle:Debug';
    }

}

हाँ मैं इस की तलाश कर रहा था :)
टिम स्ट्रीजहॉर्स्ट

2

त्वरित संदर्भ के लिए पूरी रेसिपी (ध्यान दें कि सभी चरण अनिवार्य हैं):

1) ट्विग को इंस्टेंट करते समय, डिबग विकल्प पास करें

$twig = new Twig_Environment(
$loader, ['debug'=>true, 'cache'=>false, /*other options */]
);

2) डिबग एक्सटेंशन जोड़ें

$twig->addExtension(new \Twig_Extension_Debug());

3) @ हज़ारपेट तुनयान की तरह इसका इस्तेमाल करें

{{ dump(MyVar) }}

या

{{ dump() }}

या

{{ dump(MyObject.MyPropertyName) }}

1

डिबगिंग टेंग टेम्पलेट के लिए आप डिबग स्टेटमेंट का उपयोग कर सकते हैं ।

यहां छवि विवरण दर्ज करें

वहां आप डिबग सेटिंग को सरलता से सेट कर सकते हैं।


मुझे '' अज्ञात टैग नाम '' डीबग '' के साथ और उस ट्विग के बिना स्थापित किया गया है ।ebug: true
Alexander Morland

यदि आप prod-mode में काम कर रहे हैं, तो आपको पहले कैश को साफ करना होगा
राफेल

@AlexanderMorland हाय एलेक्स, आपको अपने कॉन्फ़िगरेशन को यहां वर्णित के रूप में विस्तारित करना होगा: त्रुटि से छुटकारा पाने के लिए github.com/symfony/symfony-docs/issues/455#issuecomment-1884861Unknown tag name "debug"
फ्लू

1

आप संपादित कर सकते हैं

/vendor/twig/twig/lib/Twig/Extension/Debug.php

और करने के लिए परिवर्तन the var_dump()कार्य\Doctrine\Common\Util\Debug::dump()


3
वेंडर फ़ोल्डर के तहत कुछ भी संपादित करना अत्यधिक अनुशंसित नहीं है।
लुइस मिलानीज

1

जैसा कि अधिकांश अच्छे PHP प्रोग्रामर XDebug का उपयोग वास्तव में रनिंग कोड के माध्यम से करना चाहते हैं और वास्तविक समय में परिवर्तनशील चर देखते हैं, dump()बुरे पुराने दिनों के कदम की तरह महसूस करते हैं ।

इसलिए मैंने ट्विग डिबग एक्सटेंशन किया और इसे गीथूब पर डाल दिया।

https://github.com/delboy1978uk/twig-debug

composer require delboy1978uk/twig-debug

फिर एक्सटेंशन जोड़ें। यदि आप इस तरह सिम्फनी का उपयोग नहीं कर रहे हैं, तो:

<?php

use Del\Twig\DebugExtension;

/** @var $twig Twig_Environment */
$twig->addExtension(new DebugExtension());

यदि आप अपनी सेवाओं में इस तरह हैं, तो YAML config:

twig_debugger:
    class: Del\Twig\DebugExtension
    tags:
        - { name: twig.extension }

एक बार पंजीकृत हो जाने के बाद, आप इसे कहीं भी ट्वीग टेम्पलेट में कर सकते हैं:

{{ breakpoint() }}

अब, आप XDebug का उपयोग कर सकते हैं, निष्पादन रोक देगा और आप संदर्भ और पर्यावरण दोनों के सभी गुणों को देख सकते हैं।

मज़े करो! :-D


0

आप डंप फ़ंक्शन का उपयोग कर सकते हैं और इसे इस तरह प्रिंट कर सकते हैं

{{ dump(MyVar) }}

लेकिन एक अच्छी बात यह भी है, यदि आप किसी फ़ंक्शन को डंप करने के लिए कोई तर्क नहीं देते हैं, तो यह प्रिंट करेगा कि सभी चर उपलब्ध हैं , जैसे

{{ dump() }}

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

0

यदि आप ऐसे वातावरण में हैं जहाँ आप dumpफ़ंक्शन का उपयोग नहीं कर सकते हैं (उदाहरण: opencart), तो आप कोशिश कर सकते हैं:

{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.