J'ai une erreur fatale EntityMalformedException: propriété de bundle manquante sur l'entité de type noeud. dans entity_extract_ids () (ligne 7700 de. \ includes \ common.inc) lorsque vous essayez d'accéder à user / xyz .
J'ai essayé de récupérer des informations sur le nœud mal formé à la ligne 7700, où le message d'erreur est généré, pense comme:
if (!isset($entity->{$info['entity keys']['bundle']}) || $entity->{$info['entity keys']['bundle']} === '') {
dpm($info);// or dpm($entity);
throw new EntityMalformedException(t('Missing bundle property on entity of type @entity_type.', array('@entity_type' => $entity_type)));
}
dpm($entity)
renvoie un objet utilisateur inattendu, et $ info une énorme quantité de choses.
Quelqu'un pourrait-il me mettre sur la bonne voie?
J'ai déjà lu tout ce que je pouvais trouver sur les erreurs de propriété de bundle manquantes , mais aucune n'a aidé à les résoudre.
dpm($entity)
Retour
uid (String, 2 characters ) 70
name (String, 9 characters ) John
pass (String, 55 characters ) $S$DUwPuOuDPiDL4nRTYXqc7a5uOfMKey7pyhOFUEKka1XM...
mail (String, 30 characters ) john@example.com
theme (String, 0 characters )
signature (String, 0 characters )
signature_format (String, 13 characters ) filtered_html
created (String, 10 characters ) 1396286331
access (String, 10 characters ) 1397146661
login (String, 10 characters ) 1396513460
status (String, 1 characters ) 1
timezone (NULL)
language (String, 2 characters ) fr
picture (NULL)
init (String, 30 characters ) john@example.com
data (Array, 5 elements)
roles (Array, 1 element)
og_user_node (Array, 0 elements)
message_subscribe_email (Array, 1 element)
field_bio (Array, 0 elements)
field_name_first (Array, 1 element)
field_name_last (Array, 1 element)
field_facebook_url (Array, 0 elements)
field_linkedin_url (Array, 0 elements)
field_twitter_url (Array, 0 elements)
user_trusted_contacts (Array, 1 element)
group_group (Array, 1 element)
group_access (Array, 1 element)
metatags (Array, 0 elements)
rdf_mapping (Array, 3 elements)
realname (String, 13 characters ) John Doe
content (Array, 13 elements)
entity_view_prepared (Boolean) TRUE
privatemsg_disabled (Boolean) FALSE
entity_extract_ids('node', $var);
, mais au lieu d'un objet nœud pour$var
, il passe un objet utilisateur. Si vous avez des modules de contrib de version personnalisée ou de développement, essayez de les désactiver un par un pour le voir, vous pouvez trouver le coupabledpm(debug_print_backtrace());
sera inestimable ici. Vous pouvez voir quel module a tout déclenché en suivant les fonctions depuis le début de la requêtexdebug.collect_params = 4
cela vous facilitera également la vieRéponses:
L'erreur:
se produit, car votre propriété de bundle est mal formée lors du chargement ou de la sauvegarde, donc Drupal ne peut pas trouver de quel type de bundle il s'agit.
La logique de cette exception est la suivante:
Donc, fondamentalement, la valeur de
$info['entity keys']['bundle']
(pour le nœud c'est:) netype
peut pas être trouvée dans l'$entity
objet ($node->type
pour le nœud), donc Drupal ne sait pas avec quel type d'entité il s'agit. Donc, très probablement, votre entité n'est pas valide (par exemple, vous chargez quelque chose d'autre à la place) ou elle est juste vide ($entity
estNULL
).Si vous n'avez modifié aucun code Drupal, cela peut potentiellement être causé par diverses choses (très probablement par un bogue spécifique du module Drupal), telles que:
enregistrement d'une entité non valide telle que:
type
dans l'objet nœud (par exemple généré à tort par Devel Generate?);nœuds orphelins dans la table des nœuds;
nœuds ayant des références invalides / non existantes; pour les données de terme, cela peut être vérifié par:
Où se
field_data_field_some_ref
trouve le champ de donnéesfield_some_ref
dont le type est «Référence de terme».Voir: Enregistrements de base de données non supprimés pour les champs de référence de terme après la suppression du terme
avoir des termes de taxonomie orphelins (vous pouvez donc utiliser Taxonomy Orphanage );
code personnalisé non valide (erreur humaine) tel que:
!empty()
tester la variable d'entité avant d'appelerfield_get_items()
,Voici le code responsable qui est jeté par le noyau Drupal (fichier:)
common.inc
:Débogage
Si vous ne reconnaissez rien ci-dessus, la chose la plus simple pour déboguer ce type d'erreur est de placer
var_dump(debug_backtrace());
oudd(debug_backtrace());
(lorsque Devel est activé) avant le réelthrow new EntityMalformedException
sur la ligne affectéecommon.inc
.Remarque: L'utilisation de la
dd()
fonction de Devel générera les informations de débogage dans le fichier de votre dossier temporaire Drupal (temporary://drupal_debug.txt
) avec vidage de trace, sinon il pourrait être trop volumineux et difficile à lire lors du vidage à l'écran. Lors de l'utilisationvar_dump()
, il est plus facile d'appelerdie();
après l'appel et de vérifier le vidage en mode source d'affichage de la page.Si cela se produit lors de l'enregistrement du nœud, consultez ce post EntityMalformedException sur SO pour des instructions plus détaillées.
Voir également le problème Drupal suivant: # 1778572 pour plus d'idées.
la source
dd(debug_backtrace());
à la ligne affectée en face dethrow new EntityMalformedException
, vérifié que Devel est activé et exécuté la commande drush dans cron qui génère cette erreur et je n'obtiens aucune sortie de débogage. Qu'ai-je fait de mal? Merci!drupal_debug.txt
intérieur/tmp/drupal_theme/
où "drupal_theme" est le nom du thème drupal. Merci pour votre excellente aide au débogage!Grâce aux commentaires de Clive, j'ai résolu le problème comme suit.
Ajouté
ddebug_backtrace()
là où l'erreur s'est produite ( entity_extract_ids (), ligne 7700 de. \ Includes \ common.inc ) pour imprimer la pile d'appels de fonction.Puis, à la recherche de quelque chose d'inattendu dans la sortie, j'ai constaté qu'une règle de visibilité du volet pouvait être le problème.
J'avais appliqué un patch il y
entity_field_value.inc
a quelques jours seulement pour résoudre un avis de règle de visibilité ... et créé une règle de visibilité de test avec une condition field_theme.Désormais, la restauration du correctif ou la suppression de toute règle de visibilité de volet a résolu le bogue EntityMalformedException actuel ... Puissant
ddebug_backtrace()
!la source
Ce problème survient lorsqu'il y a des nœuds orphelins, supprimez-les simplement et cron s'exécutera sans aucune erreur. L'indexation de la recherche atteindra enfin 100%. Sauvegardez votre base de données avant de continuer.
En supposant que vous ayez accès à phpMyAdmin, exécutez ce code SQL pour identifier les nœuds puis supprimez-les. Remplacez mon nom de machine de type de contenu de question par votre nom de machine de type de contenu spécifique l'un après l'autre jusqu'à ce que vous n'obteniez aucun résultat, c'est-à-dire après la suppression.
SELECT n.nid, n.title, n.vid, nr.vid FROM drcm_node n LEFT JOIN drcm_node_revision nr ON nr.nid = n.nid WHERE n.type = 'question' AND nr.vid IS NULL ORDER BY n.nid ASC
Vous pouvez supprimer les nœuds orphelins en utilisant le code SQL ci-dessous. Remplacez les numéros dans le support par vos ID de nœud spécifiques
DELETE from node where nid IN (12779,12780,12781,12782)
la source