Es liegt ein schwerwiegender Fehler vor. EntityMalformedException: Fehlende Bundle-Eigenschaft für Entität vom Typ Node. in entity_extract_ids () (Zeile 7700 von. \ includes \ common.inc), wenn versucht wird, auf user / xyz zuzugreifen .
Ich habe versucht, Informationen über den fehlerhaften Knoten in Zeile 7700 abzurufen, in der die Fehlermeldung angezeigt wird.
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)
Gibt ein unerwartetes Benutzerobjekt und $ info eine große Menge von Dingen zurück.
Könnte mich jemand auf den richtigen Weg bringen?
Ich habe bereits alles gelesen, was ich über fehlende Bundle-Eigenschaftsfehler finden konnte , aber keiner hat beim Lösen geholfen.
dpm($entity)
kehrt zurück
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);
, aber anstelle eines Node-Objekts$var
wird ein Benutzerobjekt übergeben. Wenn Sie benutzerdefinierte oder Entwickler-Module haben, deaktivieren Sie diese nacheinander, um zu sehen, ob Sie den Täter findendpm(debug_print_backtrace());
wird hier von unschätzbarem Wert sein. Sie können sehen, von welchem Modul alles gestartet wurde, indem Sie die Funktionen bis zum Beginn der Anforderung zurückverfolgenxdebug.collect_params = 4
, wird dies auch Ihr Leben erheblich erleichternAntworten:
Der Fehler:
Dies passiert, weil Ihre Bundle-Eigenschaft beim Laden oder Speichern fehlerhaft ist, sodass Drupal nicht finden kann, um welche Art von Bundle es sich handelt.
Die Logik dieser Ausnahme lautet:
Im Grunde genommen kann der Wert von
$info['entity keys']['bundle']
(für den Knoten ist estype
:) nicht im$entity
Objekt ($node->type
für den Knoten) gefunden werden, daher weiß Drupal nicht, mit welcher Art von Entität es zu tun hat. Höchstwahrscheinlich ist Ihre Entität ungültig (z. B. laden Sie stattdessen etwas anderes) oder sie ist nur leer ($entity
istNULL
).Wenn Sie keinen Drupal-Code geändert haben, kann dies möglicherweise auf verschiedene Ursachen zurückzuführen sein (höchstwahrscheinlich auf einen bestimmten Fehler im Drupal-Modul), z. B .:
Speichern einer ungültigen Entität wie:
type
im Node-Objekt (z. B. von Devel Generate falsch generiert?);verwaiste Knoten in der Knotentabelle;
Knoten mit ungültigen / nicht vorhandenen Referenzen; Für Termdaten kann dies überprüft werden durch:
Wo
field_data_field_some_ref
befindet sich das Datenfeld,field_some_ref
dessen Typ der Begriff Referenz ist?Siehe: DB-Datensätze, die nach dem Löschen von Term für Termbezugsfelder nicht gelöscht wurden
verwaiste Taxonomiebegriffe haben (so dass Sie Taxonomiewaisenhaus verwenden können );
Ungültiger benutzerdefinierter Code (menschlicher Fehler) wie:
!empty()
Test auf die Entity-Variable vor dem Aufruffield_get_items()
,Hier ist der verantwortliche Code, der vom Drupal-Kern (Datei:) ausgegeben wird
common.inc
:Debuggen
Wenn Sie oben nichts erkennen, ist es am einfachsten, diese Art von Fehler zu beheben, indem Sie
var_dump(debug_backtrace());
oderdd(debug_backtrace());
(wenn Devel aktiviert ist) vor dem tatsächlichenthrow new EntityMalformedException
in der betroffenen Zeile einfügencommon.inc
.Hinweis: Wenn Sie die
dd()
Funktion von Devel verwenden, werden die Debugging-Informationen für die Datei in Ihrem Drupal-temporären Ordner (temporary://drupal_debug.txt
) mit Backtrace- Speicherauszug generiert. Andernfalls kann der Speicherauszug auf dem Bildschirm zu groß und schwer lesbar sein. Bei der Verwendungvar_dump()
ist es einfacher,die();
nach dem Anruf anzurufen und den Speicherauszug im Quellansichtsmodus der Seite zu überprüfen.Wenn dies beim Speichern des Knotens geschieht, überprüfen Sie diesen EntityMalformedException-Beitrag auf SO, um ausführlichere Anweisungen zu erhalten.
Weitere Ideen finden Sie auch in der folgenden Drupal-Ausgabe: # 1778572 .
quelle
dd(debug_backtrace());
der betroffenen Zeile vor hinzuthrow new EntityMalformedException
, stellte sicher, dass Devel aktiviert ist, und führte den Befehl drush in cron aus, der diesen Fehler auslöst, und erhalte keine Debug-Ausgabe. Was habe ich falsch gemacht? Vielen Dank!drupal_debug.txt
inside erstellt,/tmp/drupal_theme/
wobei "drupal_theme" der Name des Drupal-Themas ist. Vielen Dank für Ihre hervorragende Hilfe beim Debuggen!Dank Clive-Kommentaren habe ich das Problem folgendermaßen gelöst.
Hinzugefügt,
ddebug_backtrace()
wo ein Fehler aufgetreten ist ( entity_extract_ids (), Zeile 7700 von. \ Includes \ common.inc ), um den Funktionsaufrufstapel zu drucken.Auf der Suche nach etwas Unerwartetem in der Ausgabe stellte ich fest, dass eine Sichtbarkeitsregel möglicherweise das Problem ist.
Ich hatte vor
entity_field_value.inc
ein paar Tagen einen Patch angewendet , um eine Sichtbarkeitsregel zu lösen ... und eine Testsichtbarkeitsregel mit einer field_theme-Bedingung erstellt.Das Zurücksetzen des Patches oder das Entfernen von Sichtbarkeitsregeln für Fenster löste jetzt den aktuellen EntityMalformedException-Fehler ... Leistungsstark
ddebug_backtrace()
!quelle