Dal şablonlarındaki değişkenleri nasıl değiştirebilirim?


157

Yalnızca size verilmiş olanı sunduğunuz katman desenini görüntüleyin ve hepsi iyi, ancak neyin mevcut olduğunu nasıl bilebilirsiniz? TWIG'de "tüm tanımlanmış değişkenleri listele" işlevi var mı? Değişken dökümü yapmanın bir yolu var mı?

Ben onu ararken bulduğu çözüm benim kullanabileceğiniz bir işlevi tanımlamak için oldu varolan php hata ayıklama araçları tarafından bir işlev enjekte ama bunu bulduk tüm referanslar bu kod güzel iki satır içerir, ancak hiçbir yerde bu belirtilen olduğu yere yerlerine koy. Tanımlanmış bir $ loader değişkenine ihtiyaç duydukları gerçeğe göre , /app/config/autoload.php denedim ama $ loader yanlış türdü. Bir dal işlevi eklemek için php kodunu nereye yerleştirebilirim?

Yanıtlar:


252

Twig 1.5'ten itibaren doğru cevap döküm işlevini kullanmaktır. Twig belgelerinde tam olarak belgelenmiştir . İşte Symfony2 içinde bunu etkinleştirmek için belgeler.

{{ dump(user) }}

3
BTW, ilişkisel eşleme ile nesneleri
boşaltırken

14
{{ dump() }}Tüm değişkenleri boşaltmak için kullandığımda , boş bir sayfa döndürür. Bir değişkeni boşaltmanın başka bir yolu var mı?
Jerry Pham

Symfony 2.5'ın en son sürümünü kullanıyorum ve dev ortamı için çekirdeği yüklerken config.yml ve config_dev.yml kurulum ve hata ayıklama modları açık. Aşağıda Morland tarafından bahsedilen diğer manuel yöntemleri denedim. Her iki durumda da, döküm kullanıldığında boş bir sayfa alıyorum. Ve çöplük yok.
Chadwick Meyer

Eğer olduğu ve olmadığı boş bir sayfa alırsanız dump, belli ki dumpsorun değildir. Aksi takdirde çözemiyorsanız yeni bir soru göndermenizi öneririm.
Icode4food

1
Aşağıdaki hatayı alıyorum: `Twig_Error_Syntax - Bilinmeyen" döküm "
işlevi`

28

Buradadebug belgelenen etiketi kullanabilirsiniz .

{% debug expression.varname %}

Düzenleme: Twig 1.5 itibariyle, bu kullanımdan kaldırıldı ve yeni dumpişlevle değiştirildi (not, artık bir işlev ve artık bir etiket değil). Ayrıca bkz: Yukarıdaki kabul edilen cevap.


7
Bir hata mesajı alırsanızUnknown tag name "debug" , yapılandırmanızı (genel olarak config.ymlveya küresel config_dev.ymlolarak) burada açıklandığı gibi uzatın
grip

5
Bu yöntem Twig 1.5'ten itibaren kullanımdan kaldırılmıştır.
Icode4food

4
Cevaba bir kullanımdan kaldırma notu eklendi.
igorw

17

Bu yüzden çalışıyorum, kısmen biraz hackish:

  1. Set twig: debug: 1içindeapp/config/config.yml
  2. Bunu config_dev.yml dosyasına ekleyin

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

  4. Yerine kendi hata ayıklama işlevini kullanmak için print_r(), ben açtı vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.phpve değiştirilmesi print_r(içind(

PS. Hala nasıl / nerede $ twig ortamı filtre ve uzantıları eklemek için kapmak bilmek istiyorum.


1
btw: önbelleği temizlemek için konsol aracını kullanabilirsiniz ( stackoverflow.com/questions/6789950/… )
Raffael

bunu yapmanın bir avantajı var mı?
Alexander Morland

daha basit ... konsol aracını bilmiyorsanız, kontrol etmenizi öneririm
Raffael

3
Ayarlamanız gerekmez, twig: debug: 1çünkü bu bilgiyi ön kontrol cihazınızın ortamından devralır. Aksi takdirde ürün ortamınızda yanlışlıkla hata ayıklama çıktısı alabilirsiniz. Geliştirici ortamında çalıştığınız sürece varsayılan olarak etkindir ve ürün ortamınızda devre dışı bırakılmıştır.
grip

1
Bu, Twig 1.5'ten beri modası geçmiş. Diğer yanıtı görün: stackoverflow.com/a/10080404/107768
Icode4food

14

Uygulamanızda Twig'i bileşen olarak kullanıyorsanız , bunu yapabilirsiniz:

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

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

Ardından şablonlarınızda:

{{ my_variable | var_dump }}

Bunları nereye yerleştirmeli / değiştirmeliyim $twig = new Twig_Environment($loader, array(...?
PolGraphic

5

Bağımsız bir bileşen olarak Twig kullanıyorsanız, döküm (değişken) işlevinin kutudan çıkar çıkması olası olmadığından hata ayıklamanın nasıl etkinleştirileceğine dair bazı örnekler

Bağımsız

Bu, icode4food tarafından sağlanan bağlantıda bulundu

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

çakmaktaşı

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

5

Tüm özel değişkenleri dök:

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

Bunu sizin için yapacak eklentimi kullanabilirsiniz (çıktıyı güzelce biçimlendirir):

Dal Dökümü Çubuğu


güzel snippet. teşekkür ederim. dökümü (değer) değeri ile değiştirirseniz bu benim için çalışır | var_dump
matthijs koevoets

3

{{ dump() }}benim için çalışmıyor. PHPjikleleri. Yuvalama seviyesi çok derin sanırım.

Gerçekten gereken tek debugbir kullanıyorsanız Twig şablonları debuggergibi bir uzantısıdır bu .

O zaman bu sadece bir kesme noktası belirleme ve {{ inspect() }}ihtiyacınız olan her yerde arama . İle aynı bilgiyi {{ dump() }}ancak hata ayıklayıcınızda alırsınız .


3

Symfony> = 2.6 olduğundan, hoş bir VarDumper bileşeni var, ancak Twig dump()işlevi tarafından kullanılmıyor .

Üzerine yazmak için bir uzantı oluşturabiliriz:

Aşağıdaki uygulamada, ad alanlarını değiştirmeyi unutmayın.

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';
    }

}

Evet bunu arıyordum :)
Tim Strijdhorst

2

Daha hızlı referans için buradaki tam tarif (tüm adımların zorunlu olduğunu unutmayın):

1) Twig'i başlatırken, hata ayıklama seçeneğini geçin

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

2) Hata ayıklama uzantısını ekleyin

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

3) @Hazarapet Tunanyan'ın işaret ettiği gibi kullanın

{{ dump(MyVar) }}

veya

{{ dump() }}

veya

{{ dump(MyObject.MyPropertyName) }}

1

Twig şablonlarında hata ayıklama için debug deyimini kullanabilirsiniz .

resim açıklamasını buraya girin

Burada hata ayıklama ayarını açık bir şekilde ayarlayabilirsiniz.


Ben 'Bilinmeyen etiket adı "hata ayıklama" almak ve ayarlama ile twig.debug: true
Alexander Morland

prod modunda çalışıyorsanız, önce önbelleği temizlemeniz gerekir
Raffael

@AlexanderMorland Merhaba Alex, hatadan kurtulmak için yapılandırmanızı burada açıklandığı gibi genişletmelisiniz: github.com/symfony/symfony-docs/issues/455#issuecomment-1884861Unknown tag name "debug" .
grip

1

Düzenleyebilirsiniz

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

ve the var_dump()işlevleri\Doctrine\Common\Util\Debug::dump()


3
Satıcı klasörü altında herhangi bir şeyin düzenlenmesi önemle tavsiye edilmez.
Luis Milanese

1

En iyi PHP programcıları XDebug'u aslında çalışan kodda adım atmak ve değişkenleri gerçek zamanlı olarak izlemek için kullanmaktan dump()hoşlandığından, eski kötü günlere bir adım gibi geliyor.

Bu yüzden bir Twig Debug uzantısı yaptım ve Github'a koydum.

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

composer require delboy1978uk/twig-debug

Ardından uzantıyı ekleyin. Symfony kullanmıyorsanız, şöyle:

<?php

use Del\Twig\DebugExtension;

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

Hizmetlerinizde böyle iseniz YAML config:

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

Kayıt olduktan sonra, bunu bir dal şablonunda istediğiniz yerde yapabilirsiniz:

{{ breakpoint() }}

Artık XDebug'u kullanabilirsiniz, yürütme duraklatılır ve hem Bağlamın hem de Ortamın tüm özelliklerini görebilirsiniz.

İyi eğlenceler! :-D


0

döküm işlevini kullanabilir ve bu şekilde yazdırabilirsiniz

{{ dump(MyVar) }}

ama güzel bir şey var, dökümü işlevine herhangi bir argüman ayarlamazsanız, tüm değişkenleri yazdırır , örneğin

{{ dump() }}

Evet, işe yarıyor, ancak
Twig'i

0

dumpİşlevi kullanamayacağınız bir ortamdaysanız (ör: opencart), şunları deneyebilirsiniz:

{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.