大きなオブジェクトまたは複雑なオブジェクトでDevelデバッグ関数を使用する方法


7

Develのデバッグ機能を実際に使用したり、モジュールや小枝テンプレートで使用したりするのに問題がkint()ありdpm()ます。それらはプリミティブ変数、フラット配列などで正常に動作しますが、このようなオブジェクトを調べようとするEntityRerefenceFieldItemListと、サイトがクラッシュするか(ホワイトページ)、大量のデータが生成され、リストを展開するスクリプトが機能しなくなります。 。

これらの問題を回避するにはどうすればよいですか?

回答:


8

エンティティとフィールドを操作するときは、オブジェクトではなくを確認する必要があります。

エンティティには$entity->toArray()、フィールドオブジェクトにはを使用します$field->getValue()。これをほぼ1:1に変換して、オブジェクトのこれらの値にアクセスできます(例:$ entity-> field_name-> property)。

エンティティ参照フィールドの-> entityなどの計算されたプロパティなど、いくつかは表示されていません。全体的な概要については、https://wizzlern.nl/drupal/drupal-8-entity-cheat-sheetを参照してください

とは言っても、デバッグ関数よりもIDE + xdebugを強くお勧めします。これは、上記のメソッドによって返された値の配列で正常に機能する、単純なdebug()だけを使用することもあります。


9

最初の問題は、Kintが深くなる配列/オブジェクトの最大レベルを変更することで一時的に修正できます。現在、これはまだモジュール内のコードの1行を変更することによって行う必要があります。これを構成可能な設定にするための問題https://www.drupal.org/node/2405179がすでにありますが。

devel/kint/kint/config.default.php変更7任意の番号にあなたは罰金です。通常はに設定し4ます。

/** @var int max array/object levels to go deep, if zero no limits are applied */
$_kintSettings['maxLevels'] = 7;

この番号は、Develモジュールを更新するとすぐにリセットされることに注意してください。


更新:この美しいスニペットが単にsettings(.local).phpに配置されていることがわかりました。ハッキングやパッ​​チは必要ありません。

// Change kint maxLevels setting:
include_once(DRUPAL_ROOT . '/modules/contrib/devel/kint/kint/Kint.class.php');
if (class_exists('Kint')) {
  // Set the maxlevels to prevent out-of-memory.
  Kint::$maxLevels = 4;
}

4

Develモジュールは優れたツールですが、すべての状況で機能するわけではありません。Twig XDebugと呼ばれる小枝をデバッグするためのモジュールが実際にあります(まだ実装していません)。

または

IDEでxdebugerを手動でインストールします。

自由に利用できるIDE:

  • ネットビーンズ

  • 日食

  • Aptana Studio(Eclipse派生)

有料IDE:

  • phpDesigner

  • Jetbrains PHPStorm

  • Komodo IDE(無料/柔軟な価格設定シナリオがあります)。

IDEを選択した後に実行する次のステップ。

  1. Xdebugをインストールする

  2. php.ini設定を変更してxdebugを有効にします

  3. IDEをインストールし、xdebugとブラウザーを使用するように構成します。

  4. おそらく、xdebugのブラウザープラグイン。EX- ChromeのXdebugのヘルパー


最初の部分について:現在、develは、関数付きのTwigテンプレートにXDebug統合を提供しています{{ devel_breakpoint() }}ここを参照
marco

4

マウスのクリックには注意してください+。アイコンをクリックしないでください。これにより、すべてのレベルが拡張され、時間がかかる場合があります。タイトルバーをクリックすると、最上位のみが展開されます。

Drupal 8デバッグ:KintでのKreful Klicking


私はそれがキントの左端の「+」記号をクリックすることについてではないと思いますが、それは実際にはオブジェクトのサイズが非常に重いためレンダリングのプロセスとページの間に空白のページが表示されるほど壊れている場合です。
Ashish Deynap 2017年

これは、質問の最後の部分についてです:「...または、リストを展開するためのスクリプトが機能しないような大量のデータを生成します。」-残りは他の回答で完全にカバーされています。
2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.