web-dev-qa-db-ja.com

ノード、ビュー、ブロック、ページの変数をデバッグする最も簡単な方法は何ですかtwigテンプレート?

ノード、ビュー、ブロック、ページテンプレートの変数をデバッグする最も簡単な方法は何ですか。

以前、drupal 7でdevelモジュールを使用しました。dpm()関数を使用することにより、非常にすっきりとした構造を示し、変数の値を簡単に見つけることができました。

また、保護された変数の値を取得する最も簡単な方法は何ですか。

drupal 8でデバッグが非常に複雑になったのはなぜですか?

3
user52318

ノード、ビュー、ブロック、ページテンプレートの変数をデバッグする最も簡単な方法は何ですか。

ドキュメント から直接:

変数を出力するための最善の方法は、Xdebugを使用することです

以下で説明する他のxdebug以外のメソッドを使用すると、多くの再帰的なレンダリングが発生し、結果としてページや情報のページが役に立たなくなる可能性があります。

したがって、適切なデバッガーを使用することをお勧めします。 _var_dump_、またはdevelに含まれているkint()ツールのような拡張機能を使用したくなるかもしれません。これは、セットアップが少ないと認識されているためです。ただし、公式文書を強化するために、そうしないことを強くお勧めします。

XDebugの調査と実装にかかる時間は、自分がはるかに効果的なデバッガであることがわかると、何度も何度も節約されます。 Varダンプはデバッグには問題ありませんが、かなり古く、XDebugを適切に統合する方法を知っているIDEで使用する場合と比較すると、率直に言えば不十分なアプローチになります。

さらに、リソースの問題が発生することはありません。ページの前処理メソッドでksm($vars)を実行しようとしても、500エラーは発生しません。出力の誤った部分を誤ってクリックした後、ページが再び応答するのを30秒待つ必要がなくなりました。

また、保護された変数の値を取得する最も簡単な方法は何ですか。

保護されたプロパティは、保護されているだけです。クラスの作成者がメソッドを公開するか、または魔法のメソッドを介して利用できるように設計されていない限り、それらに簡単にアクセスすることはできません。そのような方法が存在する場合は、それらを使用できます。または、慣習を破ると決心した場合は、リフレクションによってそれらを取得できます。これは問題ではありませんDrupalで解決できるか、解決しようとします。

もちろん、デバッガーは保護されたプロパティの値を表示するため、それらを探す必要はありません。

drupal 8でデバッグが非常に複雑になったのはなぜですか?

私の意見では実際には簡単になりましたが、それはあなたのOutlookと経験に依存すると思います。はい、少しのオーバーヘッドがあります。デバッガを設定する必要がありますが、開発を行う人は誰でもデバッガを準備する必要があります。一度設定するだけで、数回クリックするだけですべてのプロジェクトで永遠に使用できます。追加のコードは不要です。完了時にデバッグコードを削除することを忘れず、1つTwig kint()の呼び出しは、develモジュールが無効になっている本番環境に移行します。

それは価値のある比較IMOでさえありません。デバッガーは、静的変数のダンプが毎回行うことができるすべてを打ち負かします。あなたが改心したら、あなたは戻ることを考えないだろうと約束します!

5
Clive

ノード、ビュー、ブロック、ページテンプレートの変数をデバッグする最も簡単な方法は何ですか。

Devel モジュールに付属するDevel Kintを使用します。


Kint 101へようこそ

重要:twigファイルでkint()を使用するには、デバッグを有効にする必要がありますtwig。twig/templateファイル内でデバッグしない場合は、この部分をスキップできます。

Drupal Console が_drupal site:mode dev_をインストールしている場合は、開発が完了したら、必ず_drupal site:mode prod_に戻してください。

Drupal Console がない場合は、次のようにします。

Twig _sites/default/services.yml_でのデバッグを有効にします。_services.yml_がまだ存在しない場合は、_default.services.yml_をコピーして_services.yml_にコピーします。)

デバッグ変数をtrueに設定します。そして、キャッシュをクリアします。

_parameters:
  twig.config:
    debug: true
_

開発が完了したら、必ずデバッグをfalseに戻します。

ソース デバッグTwigテンプレート

問題を防ぐために、次のことを行ってください

手始めに、特にパラメーターを渡さずに{{ kint() }}を試してみると、キントダンプを試したときにこの問題が発生する可能性があります。

enter image description here

これは、サーバーリソースがデフォルトのキント設定を処理するには配列またはオブジェクトが大きすぎるためです。

/ modules/devel/kint/kint/config.default.phpを編集し、再帰とメモリを減らすために_$_kintSettings['maxLevels']_を低い数値に設定します変数のダンプに必要です。デフォルトは7で、私は4に設定しています。それでも4が機能しない場合は、数を減らしてください。

OK、キントを使いましょう

注:ログアウト時にdbugを実行しようとしている場合は、アクセスのヒント情報を提供する必要があります匿名ユーザーの役割に対する権限。

たとえば、comments.html.twigで{{ kint(content) }}を実行すると、

enter image description here

ヒント#1 +ボタンをクリックしないでください、それは純粋な悪です

+ボタンは、すべての子とその子を自動的に開きます。

代わりに、バーのどこでもクリックしてください。ただし、たとえば+ボタンはここをクリックしてください。

enter image description here

私たちのKintがどれほど整頓されているか見てください

enter image description here

また、保護された変数の値を取得する最も簡単な方法は何ですか。

価値を得る

ユーザーに興味があるとしましょう。したがって、ユーザーをクリックしますが、もう一度+ボタンをクリックしないでください。あなたはこれを見るでしょう

enter image description here

IDは保護されていますが、この値を取得するにはどうすればよいですか?

ヒント#2利用可能なメソッドタブをクリックします

これにより、ここで使用できるすべてのメソッドが明らかになります

enter image description here

したがって、ユーザーIDを取得するためにid()であるので、最も効果的なものを使用してください。

{{ content.user.id() }}


drupal 8でデバッグが非常に複雑になったのはなぜですか?

あなたがKintの使い方を知っている限り、そうではありません

上記のすべてのヒントとテクニックを使用して、この質問に答えることができました comment.html.twigにコメント作成者の電子メールを表示

12
No Sssweat

twig_Tweak モジュールを使用できます。

{{ drupal_dump(var) }}またはそのエイリアス{{ dd(var) }}を使用して、twigデバッグモードが無効になっている場合でも機能する変数ダンプを取得できます。

機能の完全なリストは次のとおりです。 Twig Tweak Cheat Sheet

4
amjad1233