web-dev-qa-db-ja.com

twigテンプレートをデバッグするときにkint()のロードを速くするにはどうすればよいですか?

Develモジュールのkint()は、PHPメモリー制限を使い果たし、ブラウザーをドラッグさせるため)で操作するのがいかに難しいかについて、かなりの議論を見てきました。いくつか聞いたことがあるレベルの数を制限することで速度を向上させることについての考えたとえば、settings.phpでは、次のことができます。

require_once DRUPAL_ROOT . '/modules/contrib/devel/kint/kint/Kint.class.php';
Kint::$maxLevels = 3;

Kint()の速度を向上させる他の方法はありますか?

15
chrisshattuck

質問で言及されたsettings.phpメソッドに加えて、他のユーザーが最大出力レベルを設定するために言及した他の2つの方法に加えて、いくつかの他のアイデアがあります:

  1. /modules/contrib/devel/kint/kint/config.phpファイルを作成し、$_kintSettings['maxLevels'] = 3;という行を追加/変更します(Slackの@mdrummondによる)

  2. 前処理関数で、以下を追加します:(Slackの@thpoulによる)

    kint_require();
    Kint::$maxLevels = 3;
    
  3. ツリー全体を表示する+記号は絶対にクリックしないでください。代わりにブロックをクリックしてください。右矢印をクリックして新しいウィンドウで出力を開くと、表示が見やすくなります(出力がブロック内にある場合など)。 (Slackの@cwightrunによる)

  4. Kint()を使用する代わりに、前処理関数を作成し、デバッガーを使用して変数を調べます。 (Slackの@danny_englanderによる)

  5. ツリー全体を回転させるのではなく、kint()に特定の変数を渡します( 下の@No Sssweatによって )。

  6. 存在する変数を知る必要があるだけの場合は、{% for key, value in _context %}ループを実行するだけでキーを表示できます( 以下@mortendkによって

24
chrisshattuck

Kintは、変数およびtwigテンプレートをデバッグするために使用できる唯一のライブラリではありません。

私は Symfony var-dumper を使用することをお勧めします。IMHOは変数をデバッグするための最も強力なライブラリの1つです。 symfony var-dumperはdevelモジュールの最新バージョンと統合されています(この問題をdevel issueキューで確認してください symfonyの基本的なvar-dumper統合を追加してください

Develでvar-dumperを使用する場合

  • 開発モジュールをダウンロードしてインストールする
  • composer(_composer require symfony/var-dumper_)を介してvar-dumperをインストールします
  • 開発設定ページに移動し、var-dumperをデフォルトのダンパーとして設定します
  • twigテンプレートのデバッグ変数に{{kint()}}の代わりに{{ devel_dump() }}または{{ kpr() }}または{{ dpm() }}を使用します
7
marco

ここに別のヒントがあります:

すべてを返す{{ kint() }}を使用する代わりに、必要な変数を渡すことでより具体的にすることができます。したがって、読み込みが速くなります。

例:node-[type] .html.twigでは、コンテンツ変数をkintに渡すことができます。

{{ kint(content) }}

フィールドの名前がわかっている場合は、さらに具体的にすることができます。

{{ kint(content.field_name['#items'].getValue()) }}

これは、フィールド名の値のみを返します。

2
No Sssweat

キントを使用する代わりに、この小さなトリックを実行して、そこに何があるかを知ることができます

node.html.twig

<ol>
{% for key, value in _context  %}
<li>{{ key }} </li>
 {% if loop.index == 2 %}}
    <pre>{{ dump( value ) }}</pre>
{% endif %}
{% endfor %}
</ol>

はい、それはkintがあなたに見せたいと思うすべての愛を与えませんが、少なくともあなたは名前などを手に入れます

2
mortendk

参考までに、Devel v3では、@ chrisshattuckによって提案された最上位の方法を使用する場合、2つの更新を行う必要があります。

  1. admin/config/development/devel?q=/admin/config/development/develに移動
  2. 「Kint」が選択されていることを確認してください。
  3. 最大深度を上書きするには、settings.local.phpに移動して、max_depth変数を更新します。
  include_once(DRUPAL_ROOT . './../vendor/kint-php/kint/src/Kint.php');
  if (class_exists('Kint')) {
    Kint::$max_depth = 4;
   }  
1
mrsflinger

HTMLビューを取得できない場合、またはkint出力の読み込みが遅すぎる場合。

変数をシリアル化して保存します

\Drupal::logger('custom debug')->notice($string);

次に、それを nserialize.com にコピーし、Krumoディスプレイを選択します...

0
Jimmy Ko