krumo () / dpm () tidak berfungsi

8

Saya memiliki modul khusus dan templat untuk mengubah tampilan formulir pengiriman simpul saya, termasuk instruksi ini .

Modul saya terdiri dari tiga fungsi:

  • A hook_form_alter()yang berfungsi dengan baik
  • A hook_theme()yang tidak melakukan apa pun kecuali mengembalikan array, bahkan jika Anda memasukkan kode lain sebelumnya return(tidak yakin apakah ini sesuai desain)
  • A hook_preprocess_HOOK()yang saat ini kosong

dpm()sepertinya tidak melakukan apa-apa hook_preprocess_HOOK(), meskipun krumo()pada variabel yang sama jenis pekerjaan. Ini menetapkan pesan Drupal yang berbunyi Array: [n] itemstetapi tidak dapat diperluas atau diperiksa sama sekali.

Di templat saya, print_r($form);mencetak array formulir seperti yang diharapkan. dpm('self-aware roomba');menetapkan pesan Drupal "roomba sadar diri" seperti yang diharapkan. tapi dpm($form); tidak melakukan apa pun dan tidak melempar kesalahan.

Semuanya kecuali saya hook_form_alter()persis seperti yang ditampilkan dalam tutorial tertaut. Saya bahkan mencoba menarik seluruh hook_form_alter()untuk melihat apakah itu berfungsi tanpanya; tidak.

Apa yang bisa menyebabkan dpm()/ krumo()gagal diam-diam?

beth
sumber
Apakah modul Devel diinstal? dpm () berasal dari modul Devel
Mohammad Ali Akbari
Ya, Devel diinstal. dpm('self-aware roomba');tidak akan bekerja sebaliknya dan krumo()tidak akan kembali Array: [n] items, itu hanya akan menyebabkan kesalahan PHP yang fatal, yang akan menyebabkan log saya tidak kosong.
beth
jadi tolong tempatkan kode Anda di pertanyaan Anda dan biarkan saya menghasilkan kesalahan;)
Mohammad Ali Akbari
Itu persis identik dengan kode dalam tutorial yang ditautkan. Agak lama untuk memposting semuanya di jendela pertanyaan. Semua kode ada di sini: drupal.org/node/1092122
beth
di fungsi mana (di mana) Anda mencoba dpm ()?
Mohammad Ali Akbari

Jawaban:

6

Saya telah mengalami masalah di mana dpm()dan beberapa pesan lainnya dimakan oleh permintaan 404 di latar belakang.

Penjelasan:

Jika dpm()atau drupal_set_message()dipanggil sebelum pesan dicetak dengan theme_status_messages(), maka Anda bisa melihatnya di halaman yang sama.

Jika dpm()atau drupal_set_message()dipanggil sesudahnya theme_status_messages(), maka pesan-pesan itu akan ditunda $_SESSIONhingga permintaan berikutnya yang melakukannya theme_status_messages().

Beberapa jenis permintaan TIDAK memicu theme_status_messages(). Misalnya mengirimkan formulir hanya akan melakukan pemrosesan formulir, dan kemudian melakukan redirect, sehingga pesan tetap di $_SESSION.

Selain itu, itu hanya akan memicu pada permintaan oleh pengunjung / klien yang sama (inilah sebabnya ia disimpan dalam sesi, yang khusus untuk klien).

Namun, beberapa permintaan yang terjadi di latar belakang memicu theme_status_messages(), dan dapat memakan pesan Anda.

Dalam kasus saya ini adalah permintaan untuk gambar yang hilang, yang menghasilkan 404 halaman penuh dengan pesan html (dan saya tidak bisa melihat semua ini, jelas).

Larutan:

Solusinya adalah mengaktifkan fitur "fast 404".

donquixote
sumber
Itu adalah debugging yang sangat bagus, bagus sekali. Masalah saya adalah bahwa saya memiliki file SVG 404ing, yang tidak tercakup dalam ekstensi file default. Terima kasih atas jawaban yang bagus!
John McCollum
Suara terbanyak untuk riset Anda, @zhilevan! Fast 404 tidak menyelesaikan ini untuk saya karena beberapa alasan, tapi ini jelas penyebabnya, karena memperbaiki 404s secara instan menyebabkan dpm () saya mulai muncul.
joe_flash
1

ujilah ini temanku

ob_start();
krumo($yourparameter);
$output = ob_get_contents();
ob_end_clean();
drupal_set_message($output);
Yusef
sumber
Ini berfungsi tetapi saya mendapatkan beberapa versi dari pesan log yang sama. Jika saya mengerti benar, semua yang dilakukan adalah mengumpulkan output dan kemudian merendernya melalui buffer php? Apakah itu benar?
marblegravy
@marblegravy ya, benar
Yusef