dpm () n'affiche aucun résultat à l'écran

23

J'ai le même problème car file_scan_directory () prend environ 10 secondes pour s'exécuter . J'ai juste essayé la dpm(func_get_args())suggestion, et malheureusement elle ne me montre rien.

J'ai effacé tous les caches et exécuté les tâches cron. Qu'est-ce que je rate?

Jimmy
la source
2
assurez-vous que vous avez les autorisations pour accéder aux informations du développeur sous devel dans people / permissions
karthik

Réponses:

28

Assurez-vous de l'avoir print $messages;dans votre page.tpl.phpfichier modèle. Par défaut, devel (dpm) est configuré pour imprimer son contenu dans la zone de message du site. Donc, si votre modèle pour une raison quelconque ne rend pas le contenu de $messages, vous ne verrez rien.

svetlio
la source
13
  1. Parfois, ça krumo($variable)peut marcher quand dpm($variable)ça ne marche pas.

  2. Parfois, ça print dpm($variable)peut marcher quand dpm($variable)ça ne marche pas.

    1. pourrait aussi être la solution quand il n'y print $messagesen a page.tpl.phpplus en vous . Vous pouvez peut-être l'ajouter à nouveau.
leymannx
la source
9

Vous devez être connecté au site Drupal, avec les autorisations appropriées pour accéder à Devel. Connectez-vous en tant qu'administrateur devrait le faire.

Powdermonkey1850
la source
7
La connexion n'est pas nécessaire si les utilisateurs anonymes ont la bonne autorisation.
kiamlaluno
3
Cette autorisation se trouve dans «admin / people / permissions» sous «Accéder aux informations sur les développeurs».
Citricguy
9

Je recommande fortement devel_debug_log . Il nécessite le module devel et vous donne la fonction ddl (). ddl ajoute une page à vos rapports dans la configuration, donc c'est similaire à l'impression sur watchdog, mais vous avez une belle page propre où vous pouvez envoyer vos messages de débogage, et ne vous inquiétez pas des conditions de type race où vos messages pourraient être effacés avant que vous ne les ayez une chance de les voir - ou, comme dans votre cas, des problèmes thématiques.

(C'est également un outil EXTRÊMEMENT utile si vous essayez de créer une sorte d'API, car toutes ces demandes ne vous montreraient jamais aucun type de message dpm ().)

Tendance troublante
la source
1
C'était la meilleure solution globale pour moi.
rrirower
1
Également inestimable lors du débogage des requêtes ajax.
Felix Eve
8

Assurez-vous d'avoir activé et installé le module Devel comme l' dpm()est une fonction déclarée dans ce module.

dpm()description tirée d' ici .

Imprime une variable dans la zone «message» de la page à l'aide de drupal_set_message (). Vous pouvez utiliser cette fonction pour suivre une ou plusieurs variables lorsque vous travaillez sur le code exécutant votre site. Étant donné que le module Devel est désormais livré avec Krumo, la sortie est compacte et discrète.

dpm($input, $name = NULL)

Si, pour une raison quelconque, vous n'utilisez pas Krumo, vous pouvez utiliser le paramètre $ name pour distinguer les différents appels à dpm ().

Après avoir téléchargé et activé Devel, essayez la réponse de file_scan_directory () prend environ 10 secondes pour s'exécuter à nouveau et cela devrait fonctionner.

Chapabu
la source
Cela reste le même. J'ai installé et activé le module devel, effacé tous les caches, exécuté cron et toujours dpm (func_get_args ()) n'affiche rien.
Jimmy
Où mettez-vous dpm(func_get_args());?
Chapabu
Dans le fichier bootstrap.inc: dpm (func_get_args ()); $ matches = drupal_system_listing ("/ ^". DRUPAL_PHP_FUNCTION_PATTERN. "\. $ extension $ /", $ dir, 'name', 0); ...
Jimmy
Essayez de passer dpm(func_get_args());à die(print_r(func_get_args());- contourner Devel pour le moment.
Chapabu
3
Si la deuxième commande recommandée par Chapabu ne change rien, cela signifie simplement que le code n'est pas appelé et que vous n'êtes pas affecté par le même problème.
Berdir
5

Si vous souhaitez l'imprimer depuis l'intérieur d'une fonction sans toucher (ou avoir) un fichier modèle, essayez ceci:

$nid = 3;
$node = node_load($nid);
dpm($node);
print theme('status_messages'); 
Gavin Mcdonough
la source
3

C'est parfois le résultat d'une ressource sur la page renvoyant un 404.

Drupal affiche la page 404 et, ce faisant, récupère (et efface) les messages de la session et les place sur la page 404 que vous ne voyez pas. Ensuite, lorsque la page principale récupère les messages, il n'en reste plus.

Vous pouvez ouvrir l'onglet réseau et vérifier si des ressources ont le statut 404.

Une solution simple ici consiste à activer le 404 rapide en décommentant cette ligne dans settings.php:

# drupal_fast_404();

Une autre bonne solution consiste à utiliser devel_debug_log comme suggéré par SlakeFistcrunch.

Felix Eve
la source
2

Parfois, le message peut être coupé ou ne fonctionnera pas en cas d'AJAX.

Une méthode plus fiable consiste à faire juste (puis à retirer après la fin):

var_dump($data); die();

Ou vous pouvez utiliser dd()(une partie de Devel également), par exemple

dd(func_get_args());

puis vérifiez votre fichier journal (dans le dossier temp), par exemple

$ tail -f /tmp/drupal_debug.txt

L'utilisation de la méthode ci-dessus est plus pratique, plus rapide et peut prendre en charge AJAX ou toute autre demande sans interrompre le rendu du site actuel.


Si vous aimez toujours dpm(), essayez également d'utiliser kint()(activez le sous-module Kint inclus pour ces jolies impressions de variables).

kenorb
la source
1

Si seuls certains dpm()appels ne fonctionnent pas, cela peut être dû à un dpm()plantage. Je l'ai vu se produire dans le scénario suivant dans un gestionnaire d'envoi de formulaire personnalisé:

function mymodule_formid_submit($form, &$form_state) {
  dpm($form_state);
}

Je crois que la condition d'erreur a été détectée par un gestionnaire d'exceptions dpm(), car la page s'affiche correctement, pas de WSOD ou quelque chose, juste pas de dpm()message non plus. L'erreur est probablement une récursion non détectée, car l'utilisation deddl($form_state) place, le navigateur a épuisé la mémoire lorsque vous regardez l'objet correspondant dans le rapport généré par le module Devel Debug Log.

Pour contourner ce problème, essayez d'imprimer uniquement une partie (pertinente) de l'objet, comme dpm($form_state['values'])ou dpm(array_keys($form_state)).

tanius
la source