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


156

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

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

回答:


251

3
ところで、リレーショナルマッピングでオブジェクトをダンプするときは注意してください
pleerock

14
を使用{{ dump() }}してすべての変数をダンプすると、空白のページが返されます。変数をダンプする他の方法はありますか?
Jerry Pham

私はSymfony 2.5の最新バージョンを使用しており、dev環境のカーネルをロードするときにconfig.ymlとconfig_dev.ymlのセットアップとデバッグモードをオンにしています。以下のMorlandによって言及されている他の手動の方法を試しました。どちらの方法でも、ダンプを使用すると空白ページが表示されます。そして、ダンプはありません。
Chadwick Meyer

の有無にかかわらず空白のページが表示される場合はdump、明らかにそれdumpが問題ではありません。それがわからない場合は、新しい質問を投稿することをお勧めします。
Icode4food 2014年

1
次のエラーが表示されます: `Twig_Error_Syntax-Unknown" dump "function`
Pathros

28

ここにdebug記載されているタグを使用できます。

{% debug expression.varname %}

編集:Twig 1.5の時点で、これは非推奨になり、新しいdump関数に置き換えられました(注:関数になり、タグではなくなりました)。参照:上記の受け入れられた回答。


7
と言うエラーが発生した場合はUnknown tag name "debug"、構成を(グローバルconfig.ymlまたはのいずれかでconfig_dev.yml)拡張してください。github.com
flu

5
このメソッドは、Twig 1.5以降非推奨です。
Icode4food 2013

4
回答に非推奨のメモを追加しました。
igorw 2013

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(

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


1
btw:キャッシュをクリアするには、コンソールツール(stackoverflow.com/questions/6789950/…)を使用できます
Raffael

それを行う利点はありますか?
Alexander Morland、2011

それは、より簡単です...あなたは、コンソールツールがわからない場合、私はあなたがそれをチェックアウトをお勧めします
ラファエル

3
twig: debug: 1フロントコントローラーの環境からこの情報を継承しているため、設定する必要はありません。そうしないと、本番環境で誤ってデバッグ情報を出力してしまう可能性があります。開発環境で作業している限り、デフォルトで有効になっており、本番環境では無効になっています。
インフルエンザ

1
これはTwig 1.5の時点で古くなっています。他の回答をご覧ください:stackoverflow.com/a/10080404/107768
Icode4food

14

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

$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(...
PolGraphic 2016年

5

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

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

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

小枝ダンプバー


素晴らしいスニペット。ありがとうございました。これは、dump(value)をvalueで置き換える場合に機能します。var_dump
matthijs koevoets 2016年

3

{{ dump() }}うまくいきません。PHPチョーク。入れ子のレベルが深すぎると思います。

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

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


3

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

}

はい、私はこれを探していました:)
Tim Strijdhorst

2

クイックリファレンス用の完全なレシピをここに示します(すべてのステップが必須であることに注意してください):

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

1

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

ここに画像の説明を入力してください

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


私は、そのtwig.debugを設定せずに「不明なタグ名『デバッグ』」を取得:真
アレクサンダー・モーランド

prodモードで作業している場合は、最初にキャッシュをクリアする必要があります
Raffael

@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
ベンダーフォルダーの下にあるものを編集することは強くお勧めしません。
Luis Milanese 2015年

1

ほとんどの優れたPHPプログラマーは、XDebugを使用して実際にコードを実行し、変数の変化をリアルタイムで監視することをdump()好むので、使用することで、古き良き時代に戻ったような気分になります。

それがTwig Debug拡張機能を作成して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


0

あなたはダンプ機能を使用して、このように印刷することができます

{{ dump(MyVar) }}

しかし、良い点が1つあります。dump関数に引数を設定しないと、次のようにすべての変数が利用可能あると出力されます

{{ dump() }}

はい、動作しますが、Twigをインスタンス化するときにオプションでデバッグが有効になっていることを確認する必要があります
Tudor Ilisoi

0

dump関数を使用できない環境(例:opencart)にいる場合は、以下を試すことができます。

{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.