Eu tenho um erro fatal EntityMalformedException: propriedade do pacote ausente na entidade do tipo node. em entity_extract_ids () (linha 7700 de. \ inclui \ common.inc) ao tentar acessar o usuário / xyz .
Eu tentei recuperar informações sobre o nó mal formado na linha 7700, onde a mensagem de erro é criada, pensa assim:
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)
retorna um objeto de usuário inesperado e $ info uma quantidade enorme de coisas.
Alguém poderia me colocar no caminho certo?
Já li o que pude encontrar sobre os erros de propriedade do pacote ausente , mas nenhum ajudou a solucionar.
dpm($entity)
retorna
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);
, mas em vez de um objeto de nó$var
, está passando um objeto de usuário. Se você tiver alguma personalizados ou versão dev módulos contrib, tente desabilitá-los um por um para ver que você pode encontrar o culpadodpm(debug_print_backtrace());
será inestimável aqui. Você pode ver qual módulo iniciou tudo seguindo as funções do início da solicitaçãoxdebug.collect_params = 4
isso também tornará sua vida muito mais fácilRespostas:
O erro:
acontece, porque sua propriedade de pacote configurável está incorreta ao carregar ou salvar, portanto, o Drupal não consegue encontrar que tipo de pacote é esse.
A lógica dessa exceção é:
Então, basicamente, o valor de
$info['entity keys']['bundle']
(para o nó é:) nãotype
pode ser encontrado no$entity
objeto ($node->type
para o nó), portanto, o Drupal não sabe com que tipo de entidade está lidando. Portanto, provavelmente sua entidade é inválida (por exemplo, você está carregando outra coisa) ou está vazia ($entity
estáNULL
).Se você não modificou nenhum código Drupal, isso pode ser causado por várias coisas (provavelmente por um erro específico do módulo Drupal), como:
salvando entidade inválida , como:
type
do objeto nó (por exemplo, gerado incorretamente pelo Devel Generate?);nós órfãos na tabela de nós;
nós com referências inválidas / inexistentes; para dados de termos, isso pode ser verificado por:
Onde o
field_data_field_some_ref
campo de dadosfield_some_ref
é do tipo 'Referência de termos'.Consulte: Registros de banco de dados não excluídos para os campos de referência do termo após a exclusão do termo
ter termos de taxonomia órfãos (para que você possa usar o Taxonomy Orphanage );
código personalizado inválido (erro humano), como:
!empty()
teste na variável de entidade antes de chamarfield_get_items()
,Aqui está o código responsável que é lançado pelo núcleo do Drupal (arquivo:)
common.inc
:Depuração
Se você não reconhecer nada acima, a coisa mais fácil para depurar esse tipo de erro é colocando
var_dump(debug_backtrace());
oudd(debug_backtrace());
(quando Devel estiver ativado) antes do realthrow new EntityMalformedException
na linha afetadacommon.inc
.Nota: O uso da
dd()
função de Devel gerará as informações de depuração para o arquivo na pasta temporária Drupal (temporary://drupal_debug.txt
) com despejo de backtrace, caso contrário, pode ser muito grande e difícil de ler ao despejar na tela. Ao usarvar_dump()
, é mais fácil ligardie();
após a ligação e verificar o despejo no modo de fonte de exibição da página.Se isso estiver acontecendo no salvamento do nó, verifique esta postagem EntityMalformedException no SO para obter instruções mais detalhadas.
Veja também a seguinte edição do Drupal: # 1778572 para mais idéias.
fonte
dd(debug_backtrace());
à linha afetada na frentethrow new EntityMalformedException
, verifiquei se o Devel está habilitado e executei o comando drush no cron que está lançando esse erro e não estou obtendo nenhuma saída de depuração. O que eu fiz errado? Obrigado!drupal_debug.txt
dentro de/tmp/drupal_theme/
onde "drupal_theme" é o nome do tema drupal. Obrigado por sua excelente ajuda na depuração!Graças aos comentários do Clive, resolvi o problema da seguinte maneira.
Adicionado
ddebug_backtrace()
onde ocorreu o erro ( entity_extract_ids (), linha 7700 de. \ Includes \ common.inc ) para imprimir a pilha de chamadas de função.Depois, procurando por algo inesperado na saída, descobri que uma regra de visibilidade do painel pode ser o problema.
Apliquei um patch
entity_field_value.inc
há alguns dias apenas para resolver um aviso de regra de visibilidade ... e criei uma regra de visibilidade de teste com uma condição field_theme.Agora, reverter o patch ou remover qualquer regra de visibilidade do painel resolveu o erro atual de EntityMalformedException ... Poderoso
ddebug_backtrace()
!fonte
Esse problema surge quando há nós órfãos, basta se livrar deles e o cron será executado sem nenhum erro. A indexação de pesquisa finalmente chegará a 100%. Faça backup do seu banco de dados antes de continuar.
Supondo que você tenha acesso ao phpMyAdmin, execute este código SQL para identificar os nós e exclua-os. Substitua minha pergunta nome da máquina do tipo de conteúdo pelo nome específico da máquina do tipo de conteúdo, um após o outro, até que você não obtenha resultado, após a exclusão.
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
Você pode excluir os nós órfãos usando o código SQL abaixo. Substitua os números no suporte pelos IDs de nós específicos
DELETE from node where nid IN (12779,12780,12781,12782)
fonte