krumo () / dpm () не работает

8

У меня есть пользовательский модуль и шаблон, чтобы изменить внешний вид форм отправки моего узла, как эти инструкции .

Мой модуль состоит из трех функций:

  • А hook_form_alter()это работает нормально
  • A, hook_theme()который ничего не делает, но возвращает массив, даже если вы вводите другой код раньше return(не уверен, что это сделано специально )
  • А, hook_preprocess_HOOK()который в настоящее время пуст

dpm()кажется , не делать ничего hook_preprocess_HOOK(), хотя krumo()на один и тот же переменных родах работы. Он устанавливает сообщение Drupal, которое читает, Array: [n] itemsно не может быть расширено или проверено вовсе.

В моем шаблоне print_r($form);распечатывает массив форм, как и ожидалось. dpm('self-aware roomba');устанавливает сообщение Drupal «самосознание roomba», как и ожидалось. но dpm($form); ничего не делает и не выдает ошибки.

Все, кроме моего, hook_form_alter()в точности так, как это выглядит в связанном уроке. Я даже попытался вытащить весь, hook_form_alter()чтобы увидеть, работает ли это без него; это не так.

Что может быть причиной dpm()/ krumo()провал молча?

в промежутке
источник
установлен модуль Devel? dpm () поступает из модуля Devel
Мохаммед Али Акбари
Да, Devel установлен. dpm('self-aware roomba');не будет работать иначе и krumo()не вернется Array: [n] items, это просто вызовет фатальную ошибку PHP, которая приведет к тому, что мои журналы не будут пустыми.
Бэт
поэтому, пожалуйста, разместите свой код в своем вопросе и позвольте мне воспроизвести ошибки;)
Мухаммед Али Акбари
Он полностью идентичен коду в связанном руководстве. Это немного долго, чтобы разместить все это в окне вопроса. Весь код здесь: drupal.org/node/1092122
Бэт
в какой функции (где) вы пытаетесь dpm ()?
Мохаммед Али Акбари

Ответы:

6

Я столкнулся с проблемой, где dpm()и некоторые другие сообщения были съедены запросом 404 в фоновом режиме.

Объяснение:

Если dpm()или drupal_set_message()вызывается до того, как сообщения будут распечатаны theme_status_messages(), вы можете увидеть их на той же странице.

Если dpm()или drupal_set_message()вызывается после theme_status_messages(), то эти сообщения задерживаются $_SESSIONдо следующего запроса theme_status_messages().

Некоторые типы запросов НЕ запускаются theme_status_messages(). Например, отправка формы будет выполнять только обработку формы, а затем выполнять перенаправление, поэтому сообщения остаются в $_SESSION.

Кроме того, он будет запускаться только по запросам одного и того же посетителя / клиента (именно поэтому он сохраняется в сеансе, который зависит от клиента).

Однако некоторые запросы, которые происходят в фоновом режиме, срабатывают theme_status_messages()и могут поглотить ваши сообщения.

В моем случае это были запросы к пропущенным изображениям, что привело к полномасштабным сообщениям в формате 404 страниц с сообщениями WITH (и я, очевидно, не увидел ни одного из них).

Решение:

Решением было активировать функцию «быстрый 404».

Дон Кихот
источник
Это действительно хорошая отладка, молодец. Моя проблема заключалась в том, что у меня был файл SVG 404ing, который не был включен в расширения файлов по умолчанию. Спасибо за отличный ответ!
Джон МакКоллум
Основные положительные голоса за ваши исследования, @zhilevan! Быстрый 404 по какой-то причине не решил для меня, но это определенно было причиной, так как исправление 404 немедленно вызвало появление моего dpm ().
joe_flash
1

проверить это мой друг

ob_start();
krumo($yourparameter);
$output = ob_get_contents();
ob_end_clean();
drupal_set_message($output);
Yuseferi
источник
Это работает, но я получаю несколько версий одного и того же сообщения журнала. Если я правильно понимаю, все, что это делает, собирает выходные данные и затем рендерит их через буфер php? Это правильно?
мраморная гравюра
@marblegravy да, верно
Юсефери