web-dev-qa-db-ja.com

twigテンプレートの変数をvar_dumpする方法は?

与えられたものだけを提示するレイヤーパターンを表示することは問題ありませんが、利用可能なものをどのように知ることができますか? TWIGに「すべての定義済み変数をリストする」機能はありますか? 変数をダンプする方法はありますか?

それを検索して見つけた解決策は、 既存のphpデバッグツール を使用できる関数を定義することでした 関数の挿入 ですが、私が見つけたすべての参照には、これらのニースの2行のコードですが、どこに配置するかは指定されていません。定義済みの$ loader変数が必要であるという事実に基づいて、/ app/config/autoload.phpを試しましたが、$ loaderの種類が間違っていました。 twig関数を追加するためのphpコードはどこに配置しますか?

152

Twig 1.5以降、正しい答えはダンプ機能を使用することです。 Twigドキュメントに完全にドキュメント化されていますこれはSymfony2内でこれを有効にするためのドキュメントです

{{ dump(user) }}
246
Icode4food

debugタグを使用できます。これは here で文書化されています。

{% debug expression.varname %}

編集:Twig 1.5の時点で、これは廃止され、新しいdump関数に置き換えられました(注、現在は関数であり、タグではありません)。参照:上記の受け入れられた答え。

27
igorw

だから私はそれを機能させた、部分的に少しハックした:

  1. twig: debug: 1app/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(に変更しました

PS。 $ twig環境を取得してフィルターと拡張機能を追加する方法/場所を引き続き知りたいと思います。

17

アプリケーションでTwigをcomponentとして使用している場合、これを行うことができます。

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

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

次に、テンプレートで:

{{ my_variable | var_dump }}
13
Julio

スタンドアロンコンポーネントとしてTwigを使用している場合、dump(variable)関数がすぐに動作する可能性は低いため、デバッグを有効にする方法の例を次に示します。

スタンドアロン

これは、icode4foodが提供するリンクで見つかりました

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

サイレックス

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

{{ dump() }}は機能しません。 PHPチョーク。ネストレベルが深すぎると思います。

debugを使用している場合、debugger Twigテンプレートに本当に必要なのは this のような拡張です。

次に、ブレークポイントを設定し、必要なときに{{ inspect() }}を呼び出すだけです。 {{ dump() }}と同じ情報を取得しますが、デバッガーで取得します。

4

すべてのカスタム変数をダンプします。

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

あなたはそれを行う私のプラグインを使用することができます(出力をうまくフォーマットします):

小枝ダンプバー

4
kapitalny

Symfony> = 2.6以降、Nice 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';
    }

}
3
Alain Tiemblo

より迅速な参照のための完全なレシピはこちら(すべてのステップが必須であることに注意してください):

1)Twigをインスタンス化するとき、デバッグオプションを渡します

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

2)デバッグ拡張機能を追加する

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

3)@Hazarapet Tunanyanが指摘したように使用する

{{ dump(MyVar) }}

または

{{ dump() }}

または

{{ dump(MyObject.MyPropertyName) }}
2
Tudor Ilisoi

Twigテンプレートをデバッグするには、 debug statement を使用できます。

enter image description here

そこで、デバッグ設定を明示的に設定できます。

1
Raffael

最も優れたPHPプログラマーは、XDebugを使用して実際に実行中のコードをステップ実行し、リアルタイムで変数の変化を監視するのが好きなので、dump()を使用することは悪い昔に戻ったように感じます。

そのため、Twigデバッグ拡張機能を作成してGithubに配置しました。

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

composer require delboy1978uk/twig-debug

次に、拡張子を追加します。次のように、Symfonyを使用していない場合:

<?php

use Del\Twig\DebugExtension;

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

もしそうなら、あなたのサービスのYAML設定でこのように:

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

登録したら、これをtwigテンプレートの任意の場所で実行できます。

{{ breakpoint() }}

これで、XDebugを使用でき、実行が一時停止し、コンテキストと環境の両方のすべてのプロパティを表示できます。

楽しむ! :-D

1
delboy1978uk

編集できます

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

the var_dump()関数を\Doctrine\Common\Util\Debug::dump()に変更します

1
user3420644

dump関数を使用して、次のように出力できます。

{{ dump(MyVar) }}

しかし、1つの素晴らしい点もあります。dump関数に引数を設定しない場合、すべての変数が利用可能のように出力されます。

{{ dump() }}
0