How to var_dump variables in twig templates?

后端 未结 14 1414
滥情空心
滥情空心 2020-12-22 17:43

View layer pattern where you only present what you have been given is fine and all, but how do you know what is available? Is there a \"list all defined variables\" function

相关标签:
14条回答
  • 2020-12-22 18:18

    For debugging Twig templates you can use the debug statement.

    enter image description here

    There you can set the debug setting explicitely.

    0 讨论(0)
  • 2020-12-22 18:21

    The complete recipe here for quicker reference (note that all the steps are mandatory):

    1) when instantiating Twig, pass the debug option

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

    2) add the debug extension

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

    3) Use it like @Hazarapet Tunanyan pointed out

    {{ dump(MyVar) }}
    

    or

    {{ dump() }}
    

    or

    {{ dump(MyObject.MyPropertyName) }}
    
    0 讨论(0)
  • 2020-12-22 18:27

    As most good PHP programmers like to use XDebug to actually step through running code and watch variables change in real-time, using dump() feels like a step back to the bad old days.

    That's why I made a Twig Debug extension and put it on Github.

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

    composer require delboy1978uk/twig-debug

    Then add the extension. If you aren't using Symfony, like this:

    <?php
    
    use Del\Twig\DebugExtension;
    
    /** @var $twig Twig_Environment */
    $twig->addExtension(new DebugExtension());
    

    If you are, like this in your services YAML config:

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

    Once registered, you can now do this anywhere in a twig template:

    {{ breakpoint() }}
    

    Now, you can use XDebug, execution will pause, and you can see all the properties of both the Context and the Environment.

    Have fun! :-D

    0 讨论(0)
  • 2020-12-22 18:28

    So I got it working, partly a bit hackish:

    1. Set twig: debug: 1 in app/config/config.yml
    2. Add this to config_dev.yml

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

    4. To use my own debug function instead of print_r(), I opened vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php and changed print_r( to d(

    PS. I would still like to know how/where to grab the $twig environment to add filters and extensions.

    0 讨论(0)
  • 2020-12-22 18:29

    If you are using Twig in your application as a component you can do this:

    $twig = new Twig_Environment($loader, array(
        'autoescape' => false
    ));
    
    $twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));
    

    Then in your templates:

    {{ my_variable | var_dump }}
    
    0 讨论(0)
  • 2020-12-22 18:29

    Dump all custom variables:

    <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 %}
    

    You can use my plugin which will do that for you (an will nicely format the output):

    Twig Dump Bar

    0 讨论(0)
提交回复
热议问题