krumo () / dpm () não está funcionando

8

Eu tenho um módulo personalizado e um modelo para alterar a aparência dos formulários de envio de nós, como essas instruções .

Meu módulo consiste em três funções:

  • Um hook_form_alter()que funciona bem
  • Um hook_theme()que não faz nada além de retornar uma matriz, mesmo se você digitar outro código antes return(não tenho certeza se é por design)
  • Um hook_preprocess_HOOK()que está vazio no momento

dpm()não parece fazer qualquer coisa em hook_preprocess_HOOK(), embora krumo()nas mesmas variáveis tipo de obras. Ele define uma mensagem Drupal que lê, Array: [n] itemsmas não pode ser expandida ou inspecionada.

No meu modelo, print_r($form);imprime a matriz do formulário conforme o esperado. dpm('self-aware roomba');define uma mensagem Drupal de "roomba autoconsciente" conforme o esperado. mas dpm($form); não faz nada e não gera erro.

Tudo, exceto o meu, hook_form_alter()é exatamente como aparece no tutorial vinculado. Eu até tentei puxar o todo hook_form_alter()para ver se funciona sem ele; isso não acontece.

O que poderia estar causando dpm()/ krumo()falha silenciosamente?

beth
fonte
o módulo Devel está instalado? dpm () vem do módulo Devel
Mohammad Ali Akbari
Sim, Devel está instalado. dpm('self-aware roomba');não funcionaria de outra maneira e krumo()não retornaria Array: [n] items, apenas causaria um erro fatal do PHP, o que faria com que meus logs não estivessem vazios.
beth
então por favor coloque o código na sua pergunta e deixe-me voltar a produzir os erros;)
Mohammad Ali Akbari
É exatamente idêntico ao código no tutorial vinculado. É um pouco longo para postar tudo na janela de perguntas. Todo o código está aqui: drupal.org/node/1092122
beth
em qual função (onde) você está tentando dpm ()?
Mohammad Ali Akbari

Respostas:

6

Corri para um problema em que dpm()e algumas outras mensagens foram comidas por uma solicitação 404 em segundo plano.

Explicação:

Se dpm()ou drupal_set_message()for chamado antes da impressão das mensagens theme_status_messages(), você poderá vê-las na mesma página.

Se dpm()ou drupal_set_message()for chamado depois theme_status_messages(), essas mensagens serão adiadas $_SESSIONaté a próxima solicitação theme_status_messages().

Alguns tipos de pedidos NÃO são acionados theme_status_messages(). Por exemplo, um envio de formulário fará apenas o processamento do formulário e, em seguida, redirecionará, para que as mensagens permaneçam no $_SESSION.

Além disso, ele será acionado apenas em solicitações do mesmo visitante / cliente (é por isso que é salvo na sessão, que é específica do cliente).

No entanto, algumas solicitações que ocorrem em segundo plano são acionadas theme_status_messages()e podem consumir suas mensagens.

No meu caso, foram pedidos de imagens ausentes, que resultaram em páginas HTML html 404 completas COM mensagens (e eu não consegui ver nada disso, obviamente).

Solução:

A solução foi ativar o recurso "fast 404".

Don Quixote
fonte
Essa é uma parte muito boa de depuração, bem feita. Meu problema foi que eu tinha um arquivo SVG 404, que não era coberto pelas extensões de arquivo padrão. Obrigado por uma ótima resposta!
John McCollum 31/03
Principais votos positivos para sua pesquisa, @zhilevan! O Fast 404 não resolveu isso para mim por algum motivo, mas essa foi definitivamente a causa, pois corrigir os 404 instantaneamente fez meu dpm () começar a aparecer.
joe_flash
1

teste isso meu amigo

ob_start();
krumo($yourparameter);
$output = ob_get_contents();
ob_end_clean();
drupal_set_message($output);
Yusef
fonte
Isso funciona, mas recebo várias versões da mesma mensagem de log. Se bem entendi, tudo o que estamos fazendo é coletar a saída e renderizá-la através de um buffer php? Isso está certo?
Marlegravy
@marblegravy sim, certo
Yusef