与えられたものだけを提示するレイヤーパターンを表示することは問題ありませんが、利用可能なものをどのように知ることができますか? TWIGに「すべての定義済み変数をリストする」機能はありますか? 変数をダンプする方法はありますか?
それを検索して見つけた解決策は、 既存のphpデバッグツール を使用できる関数を定義することでした 関数の挿入 ですが、私が見つけたすべての参照には、これらのニースの2行のコードですが、どこに配置するかは指定されていません。定義済みの$ loader変数が必要であるという事実に基づいて、/ app/config/autoload.phpを試しましたが、$ loaderの種類が間違っていました。 twig関数を追加するためのphpコードはどこに配置しますか?
Twig 1.5以降、正しい答えはダンプ機能を使用することです。 Twigドキュメントに完全にドキュメント化されています 。 これはSymfony2内でこれを有効にするためのドキュメントです
{{ dump(user) }}
debug
タグを使用できます。これは here で文書化されています。
{% debug expression.varname %}
編集:Twig 1.5の時点で、これは廃止され、新しいdump
関数に置き換えられました(注、現在は関数であり、タグではありません)。参照:上記の受け入れられた答え。
だから私はそれを機能させた、部分的に少しハックした:
twig: debug: 1
にapp/config/config.yml
を設定しますこれをconfig_dev.ymlに追加します
services:
debug.twig.extension:
class: Twig_Extensions_Extension_Debug
tags: [{ name: 'twig.extension' }]
Sudo rm -fr app/cache/dev
print_r()
の代わりに独自のデバッグ関数を使用するには、vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.php
を開き、print_r(
をd(
に変更しましたPS。 $ twig環境を取得してフィルターと拡張機能を追加する方法/場所を引き続き知りたいと思います。
アプリケーションでTwigをcomponentとして使用している場合、これを行うことができます。
$twig = new Twig_Environment($loader, array(
'autoescape' => false
));
$twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));
次に、テンプレートで:
{{ my_variable | var_dump }}
スタンドアロンコンポーネントとして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'
));
{{ dump() }}
は機能しません。 PHP
チョーク。ネストレベルが深すぎると思います。
debug
を使用している場合、debugger
Twigテンプレートに本当に必要なのは this のような拡張です。
次に、ブレークポイントを設定し、必要なときに{{ inspect() }}
を呼び出すだけです。 {{ dump() }}
と同じ情報を取得しますが、デバッガーで取得します。
すべてのカスタム変数をダンプします。
<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 %}
あなたはそれを行う私のプラグインを使用することができます(出力をうまくフォーマットします):
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';
}
}
より迅速な参照のための完全なレシピはこちら(すべてのステップが必須であることに注意してください):
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) }}
Twigテンプレートをデバッグするには、 debug statement を使用できます。
そこで、デバッグ設定を明示的に設定できます。
最も優れた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
編集できます
/vendor/twig/twig/lib/Twig/Extension/Debug.php
the var_dump()
関数を\Doctrine\Common\Util\Debug::dump()
に変更します
dump関数を使用して、次のように出力できます。
{{ dump(MyVar) }}
しかし、1つの素晴らしい点もあります。dump関数に引数を設定しない場合、すべての変数が利用可能のように出力されます。
{{ dump() }}