web-dev-qa-db-fra.com

Quelle est la manière la plus simple de déboguer des variables dans des nœuds, des vues, des blocs et des modèles de page twig?

Quel est le moyen le plus simple de déboguer des variables dans les nœuds, les vues, les blocs et le modèle de page.

Plus tôt, nous avons utilisé le module devel dans drupal 7, en utilisant la fonction dpm (), il montre une structure très nette et propre, il était si facile de trouver les valeurs des variables.

Quel est également le moyen le plus simple d'obtenir des valeurs de variables protégées.

pourquoi le débogage est devenu si complexe dans drupal 8?

3
user52318

Quel est le moyen le plus simple de déboguer des variables dans les nœuds, les vues, les blocs et le modèle de page.

Directement de la documentation :

Bien au-delà de la meilleure façon de gérer l'impression des variables, il faut utiliser Xdebug.

Si vous utilisez les autres méthodes non-xdebug indiquées ci-dessous, vous obtiendrez de nombreuses choses récursives qui peuvent entraîner des pages et des pages d'informations qui ne vous sont pas utiles.

L'utilisation d'un débogueur approprié est donc l'approche recommandée. Vous pourriez être tenté d'utiliser var_dump, Ou une extension de celui-ci comme l'outil kint() inclus avec devel, car il est perçu comme ayant moins de configuration. Mais pour renforcer la documentation officielle, je vous déconseille fortement de le faire.

L'heure qu'il vous faudra pour rechercher et implémenter XDebug sera sauvegardée maintes et maintes fois que vous vous trouverez être un débogueur beaucoup plus efficace. Le dumping var est une approche correcte pour le débogage, mais il est assez démodé et devient une approche franchement médiocre par rapport à l'utilisation de XDebug dans et IDE qui sait comment s'intégrer correctement avec lui.

De plus, vous n'aurez pas de problèmes de ressources - plus de 500 erreurs lorsque vous essayez de ksm($vars) dans une méthode de prétraitement de page. Plus besoin d'attendre 30 secondes pour que la page redevienne réactive après avoir cliqué accidentellement sur la mauvaise partie de la sortie.

Quel est également le moyen le plus simple d'obtenir des valeurs de variables protégées.

Les propriétés protégées ne sont que cela: protégées. Vous n'êtes pas censé pouvoir y accéder facilement à moins que l'auteur de la classe ne vous ait exposé une méthode pour le faire, ou qu'ils soient conçus pour être disponibles via des méthodes magiques. Si de telles méthodes existent, vous pouvez les utiliser, ou si vous êtes déterminé à briser la convention, vous pouvez les obtenir par réflexion. Ce n'est pas un problème Drupal peut ou tentera de résoudre.

Bien sûr, votre débogueur vous montrera les valeurs des propriétés protégées sans que vous ayez à les rechercher.

pourquoi le débogage est devenu si complexe dans drupal 8?

En fait, c'est devenu plus facile à mon avis, je suppose que cela dépend de vos perspectives et de votre expérience. Oui, il y a une petite surcharge maintenant, vous devez configurer un débogueur, mais quiconque fait un développement doit avoir un débogueur prêt à l'emploi. Vous ne le configurez qu'une seule fois, vous pouvez ensuite l'utiliser pour toujours plus dans chaque projet en quelques clics, sans code supplémentaire, sans oublier de supprimer ce code de débogage lorsque vous avez terminé, sans 500 erreurs quand on Twig appel à kint() passe en production où le module de développement est désactivé.

Ce n'est même pas une comparaison valable IMO, le débogueur bat tout ce que le dumping statique peut faire à chaque fois. Une fois que vous vous serez converti, je vous promets que vous ne penserez pas à y retourner!

5
Clive

Quel est le moyen le plus simple de déboguer des variables dans les nœuds, les vues, les blocs et le modèle de page.

Utilisation de Devel Kint , fourni avec le module Devel .


Bienvenue à Kint 101

Important: afin d'utiliser kint() dans un fichier twig dont vous devez activer le débogage pour Si vous ne déboguez pas à l'intérieur d'un fichier de brindille/modèle, vous pouvez ignorer cette partie.

Si vous avez Drupal Console installé drupal site:mode dev, N'oubliez pas de le remettre à drupal site:mode prod Lorsque votre développement est terminé.

Si vous n'avez pas Drupal Console , procédez comme suit:

Vous activez Twig Débogage dans sites/default/services.yml. (Si services.yml N'existe pas encore; copiez default.services.yml Et copiez-le dans services.yml.)

Définissez la variable de débogage sur true . Et vider le cache.

parameters:
  twig.config:
    debug: true

N'oubliez pas de redéfinir le débogage sur faux après avoir terminé le développement.

Source Débogage Twig templates

Maintenant, procédez comme suit pour éviter les problèmes

Pour commencer, vous risquez de rencontrer ce problème lorsque vous essayez un vidage Kint, spécialement si vous essayez simplement {{ kint() }} sans passer de paramètres

enter image description here

Cela est dû au fait que le tableau ou l'objet est trop grand pour que les ressources de votre serveur gèrent les paramètres de kint par défaut.

Modifiez /modules/devel/kint/kint/config.default.php et définissez $_kintSettings['maxLevels'] Sur un nombre inférieur pour réduire la récursivité et la mémoire nécessaire pour vider les variables. La valeur par défaut est 7, j'ai le mien réglé sur 4. Si 4 ne fonctionne toujours pas pour vous, continuez à baisser le nombre.

Ok, utilisons kint

Remarque: Si vous essayez de déboguer lorsque vous êtes déconnecté, vous devrez donner Accéder aux informations de kint permission au rôle d'utilisateur anonyme.

Par exemple, dans comments.html.twig nous faisons une {{ kint(content) }} et vous verrez

enter image description here

Astuce # 1 Ne cliquez pas sur le bouton +, c'est du pur mal

Le bouton + ouvrira automatiquement tous les enfants et leurs enfants.

Au lieu de cela, cliquez n'importe où sur la barre mais le bouton +, par exemple, cliquez ici

enter image description here

Regardez comme c'est bien rangé notre Kint

enter image description here

Quel est également le moyen le plus simple d'obtenir des valeurs de variables protégées.

Obtenir une valeur

Disons que nous sommes intéressés par l'utilisateur. Cliquez donc sur l'utilisateur, mais encore une fois ne cliquez pas sur le bouton + . Vous verrez ceci

enter image description here

L'identifiant est protégé, comment obtenir cette valeur?

Astuce # 2 cliquez sur l'onglet des méthodes disponibles

Cela révèlera toutes les méthodes que nous pouvons utiliser ici

enter image description here

Il suffit donc de choisir celui qui en fait le plus depuis, ici étant id() pour obtenir l'ID utilisateur.

{{ content.user.id() }}


pourquoi le débogage est devenu si complexe dans drupal 8?

Ce n'est pas le cas, tant que vous savez comment utiliser Kint

En utilisant tous les trucs et astuces ci-dessus, j'ai pu répondre à cette question Afficher le commentaire de l'auteur par e-mail dans comment.html.twig

12
No Sssweat

Vous pouvez utiliser le module twig_Tweak .

Vous pouvez utiliser {{ drupal_dump(var) }} ou son alias {{ dd(var) }} pour obtenir un vidage variable qui fonctionne même si twig mode de débogage est désactivé.

Voici la liste complète des fonctionnalités: Twig Tweak Cheat Sheet

4
amjad1233