Saya mendapatkan kesalahan fatal EntityMalformedException: Properti bundel tidak ada pada entitas tipe node. di entity_extract_ids () (baris 7700 dari. \ termasuk \ common.inc) ketika mencoba mengakses pengguna / xyz .
Saya mencoba mengambil info tentang simpul cacat pada baris 7700, tempat pesan kesalahan dibuat, berpikir seperti:
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)
mengembalikan objek pengguna yang tidak terduga, dan $ info sejumlah besar hal.
Bisakah seseorang menempatkan saya di jalan yang benar?
Saya sudah membaca apa pun yang bisa saya temukan tentang kesalahan properti bundel yang Hilang , tetapi tidak ada yang membantu menyelesaikan.
dpm($entity)
kembali
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);
, tapi bukannya objek simpul$var
, itu melewati objek pengguna. Jika Anda memiliki modul kontribus versi kustom atau dev, coba nonaktifkan satu per satu untuk melihatnya Anda dapat menemukan pelakunyadpm(debug_print_backtrace());
akan sangat berharga di sini. Anda dapat melihat modul apa yang memulai semuanya dengan mengikuti fungsi-fungsi kembali ke awal permintaanxdebug.collect_params = 4
itu juga akan membuat hidup Anda jauh lebih mudahJawaban:
Kesalahan:
terjadi, karena properti bundel Anda salah format saat dimuat atau disimpan, jadi Drupal tidak dapat menemukan jenis bundel apa itu.
Logika Pengecualian itu adalah:
Jadi pada dasarnya nilai
$info['entity keys']['bundle']
(untuk simpul:)type
tidak dapat ditemukan dalam$entity
objek ($node->type
untuk simpul), oleh karena itu Drupal tidak tahu dengan jenis entitas yang dihadapinya. Jadi kemungkinan besar entitas Anda tidak valid (misalnya Anda sedang memuat sesuatu yang lain sebagai gantinya) atau itu hanya kosong ($entity
adalahNULL
).Jika Anda belum mengubah kode Drupal apa pun, ini berpotensi dapat disebabkan oleh berbagai hal (kemungkinan besar oleh bug modul Drupal tertentu), seperti:
menyimpan entitas yang tidak valid seperti:
type
dari objek simpul (mis. salah dihasilkan oleh Devel Generate?);node yatim di tabel simpul;
node memiliki referensi yang tidak valid / tidak ada; untuk data jangka ini dapat diperiksa oleh:
Di mana
field_data_field_some_ref
adalah bidang datafield_some_ref
yang merupakan jenis 'Istilah referensi'.Lihat: Catatan DB tidak dihapus untuk bidang referensi istilah setelah istilah dihapus
memiliki ketentuan taksonomi yatim (sehingga Anda dapat menggunakan Panti Asuhan Taksonomi );
kode khusus yang tidak valid (kesalahan manusia) seperti:
!empty()
menguji variabel entitas sebelum memanggilfield_get_items()
,Berikut adalah kode yang bertanggung jawab yang dilemparkan oleh Drupal core (file:)
common.inc
:Debugging
Jika Anda tidak mengenali apa pun di atas, hal yang paling mudah untuk men-debug kesalahan semacam itu adalah dengan menempatkan
var_dump(debug_backtrace());
ataudd(debug_backtrace());
(ketika Devel aktif) sebelum aktualthrow new EntityMalformedException
pada baris yang terpengaruhcommon.inc
.Catatan: Menggunakan
dd()
fungsi dari Devel akan menghasilkan info debug ke file di folder temp Drupal Anda (temporary://drupal_debug.txt
) dengan dump backtrace, jika tidak bisa terlalu besar dan sulit dibaca ketika membuang di layar. Saat menggunakanvar_dump()
, lebih mudah untuk memanggildie();
setelah panggilan dan memeriksa dump dalam mode view-source halaman.Jika ini terjadi pada penyimpanan simpul, periksa posting EntityMalformedException ini di SO untuk instruksi lebih detail.
Lihat juga masalah Drupal berikut: # 1778572 untuk lebih banyak ide.
sumber
dd(debug_backtrace());
ke baris yang terpengaruh di depanthrow new EntityMalformedException
, memastikan Devel diaktifkan dan menjalankan perintah drush di cron yang melempar kesalahan ini dan saya tidak mendapatkan hasil debugging. Apa kesalahan yang telah aku perbuat? Terima kasih!drupal_debug.txt
inside di/tmp/drupal_theme/
mana "drupal_theme" adalah nama tema drupal. Terima kasih atas bantuan debug Anda yang luar biasa!Berkat komentar Clive, saya memecahkan masalah sebagai berikut.
Menambahkan
ddebug_backtrace()
tempat terjadinya kesalahan ( entity_extract_ids (), baris 7700 dari. \ Termasuk \ common.inc ) untuk mencetak tumpukan panggilan fungsi.Kemudian mencari sesuatu yang tidak terduga dalam output, saya menemukan bahwa aturan visibilitas panel mungkin menjadi masalah.
Saya telah menerapkan tambalan pada
entity_field_value.inc
beberapa hari yang lalu hanya untuk menyelesaikan pemberitahuan aturan visibilitas ... dan membuat aturan uji visibilitas dengan kondisi field_theme.Sekarang mengembalikan tambalan atau menghapus aturan visibilitas panel apa pun yang memecahkan bug EntityMalformedException saat ini ... Kuat
ddebug_backtrace()
!sumber
Masalah ini muncul ketika ada node yatim, cukup singkirkan mereka dan cron akan berjalan tanpa kesalahan. Pengindeksan pencarian akhirnya akan mencapai 100%. Cadangkan basis data Anda sebelum melanjutkan.
Dengan asumsi Anda memiliki akses ke phpMyAdmin, jalankan kode SQL ini untuk mengidentifikasi node kemudian menghapusnya. Ganti saya pertanyaan jenis konten nama mesin dengan konten spesifik Anda nama jenis mesin satu demi satu sampai Anda tidak mendapatkan hasil, bahwa setelah menghapus.
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
Anda dapat menghapus node yatim dengan menggunakan kode SQL di bawah ini. Ganti nomor dalam braket dengan ID simpul spesifik Anda
DELETE from node where nid IN (12779,12780,12781,12782)
sumber