Tengo un error fatal EntityMalformedException: falta la propiedad del paquete en la entidad del tipo de nodo. en entity_extract_ids () (línea 7700 de. \ incluye \ common.inc) al intentar acceder al usuario / xyz .
Traté de recuperar información sobre el nodo con formato incorrecto en la línea 7700, donde se genera el mensaje de error, piensa así:
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)
devuelve un objeto de usuario inesperado, y $ info una gran cantidad de cosas.
¿Podría alguien ponerme en el camino correcto?
Ya leí todo lo que pude encontrar sobre los errores de propiedad del paquete faltante , pero ninguno ayudó a resolverlo.
dpm($entity)
devoluciones
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);
, pero en lugar de un objeto de nodo$var
, está pasando un objeto de usuario. Si tiene módulos de contribución de versiones de desarrollo o personalizados, intente deshabilitarlos uno por uno para ver si puede encontrar al culpabledpm(debug_print_backtrace());
Será invaluable aquí. Puede ver qué módulo comenzó todo siguiendo las funciones hasta el comienzo de la solicitudxdebug.collect_params = 4
eso, también le hará la vida mucho más fácilRespuestas:
El error:
sucede, porque su propiedad de paquete está mal formada al cargar o guardar, por lo que Drupal no puede encontrar qué tipo de paquete es.
La lógica de esa excepción es:
Entonces, básicamente, el valor de
$info['entity keys']['bundle']
(para el nodo es:)type
no se puede encontrar en el$entity
objeto ($node->type
para el nodo), por lo tanto, Drupal no sabe con qué tipo de entidad se trata. Por lo tanto, lo más probable es que su entidad no sea válida (por ejemplo, está cargando algo más) o simplemente está vacía ($entity
estáNULL
).Si no ha modificado ningún código de Drupal, esto puede ser causado por una variedad de cosas (muy probablemente por un error específico del módulo de Drupal), como:
guardar entidades no válidas como:
type
del objeto de nodo (por ejemplo, generado incorrectamente por Devel Generate?)nodos huérfanos en la tabla de nodos;
nodos que tienen referencias no válidas / no existentes; para los datos del término, esto puede ser verificado por:
Dónde
field_data_field_some_ref
es el campo de datosfield_some_ref
cuyo tipo es 'Referencia de término'.Consulte: Registros de base de datos no eliminados para los campos de referencia de término después de eliminar el término
tener términos de taxonomía huérfanos (por lo que puede usar el orfanato de taxonomía );
código personalizado no válido (error humano) como:
!empty()
prueba en la variable de entidad antes de llamarfield_get_items()
,Aquí está el código responsable que arroja Drupal core (file:)
common.inc
:Depuración
Si no reconoce nada de lo anterior, lo más fácil de depurar ese tipo de error es colocando
var_dump(debug_backtrace());
odd(debug_backtrace());
(cuando Devel está activado) antes del realthrow new EntityMalformedException
en la línea afectadacommon.inc
.Nota: El uso de la
dd()
función de Devel generará la información de depuración en el archivo en su carpeta temporal Drupal (temporary://drupal_debug.txt
) con volcado de seguimiento, de lo contrario podría ser demasiado grande y difícil de leer al volcar en la pantalla. Cuando se usavar_dump()
, es más fácil llamardie();
después de la llamada y verificar el volcado en el modo de fuente de vista de la página.Si esto sucede en el guardado del nodo, consulte esta publicación de EntityMalformedException en SO para obtener instrucciones más detalladas.
Consulte también el siguiente número de Drupal: # 1778572 para obtener más ideas.
fuente
dd(debug_backtrace());
a la línea afectada frentethrow new EntityMalformedException
, se aseguró devel está activado y ejecutó el comando drush en cron que está lanzando este error y no estoy recibiendo ninguna salida de depuración. ¿Qué hice mal? ¡Gracias!drupal_debug.txt
dentro/tmp/drupal_theme/
donde "drupal_theme" es el nombre del tema drupal. ¡Gracias por su excelente ayuda de depuración!Gracias a los comentarios de Clive, resolví el problema de la siguiente manera.
Se agregó
ddebug_backtrace()
donde ocurrió el error ( entity_extract_ids (), línea 7700 de. \ Incluye \ common.inc ) para imprimir la pila de llamadas de función.Luego, buscando algo inesperado en el resultado, descubrí que una regla de visibilidad del panel podría ser el problema.
Me había aplicado un parche
entity_field_value.inc
hace unos días solo para resolver un aviso de regla de visibilidad ... y creé una regla de visibilidad de prueba con una condición field_theme.Ahora, revertir el parche o eliminar cualquier regla de visibilidad del panel solucionó el error actual de EntityMalformedException ...
ddebug_backtrace()
¡ Potente !fuente
Este problema surge cuando hay nodos huérfanos, simplemente deshazte de ellos y cron se ejecutará sin ningún error. La indexación de búsqueda finalmente llegará al 100%. Haga una copia de seguridad de su base de datos antes de continuar.
Suponiendo que tiene acceso a phpMyAdmin, ejecute este código SQL para identificar los nodos y luego bórrelos. Reemplace mi nombre de máquina de tipo de contenido de pregunta con su nombre de máquina de tipo de contenido específico uno tras otro hasta que no obtenga ningún resultado, después de eliminarlo.
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
Puede eliminar los nodos huérfanos utilizando el código SQL a continuación. Reemplace los números en el soporte con sus ID de nodo específicos
DELETE from node where nid IN (12779,12780,12781,12782)
fuente