arrays - orden - array_flip(): ¡solo puede voltear STRING e INTEGER values! en DrupalDefaultEntityController-> load()
php array intersect (10)
Recientemente migré mi módulo a Drupal7 (en PHP Versión 5.3.1) y ahora recibo los siguientes errores:
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:/Users/akulkarni/Desktop/xampp/htdocs/servicecasting/includes/entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:/Users/akulkarni/Desktop/xampp/htdocs/servicecasting/includes/entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:/Users/akulkarni/Desktop/xampp/htdocs/servicecasting/includes/entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of C:/Users/akulkarni/Desktop/xampp/htdocs/servicecasting/includes/entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:/Users/akulkarni/Desktop/xampp/htdocs/servicecasting/includes/entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of C:/Users/akulkarni/Desktop/xampp/htdocs/servicecasting/includes/entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of C:/Users/akulkarni/Desktop/xampp/htdocs/servicecasting/includes/entity.inc).
* Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of C:/Users/akulkarni/Desktop/xampp/htdocs/servicecasting/includes/entity.inc).
También intenté actualizar otros módulos y core a las últimas versiones, como se menciona aquí http://drupal.org/node/1022736
entidad 7.x-1.x-dev (2011-ene-24), vistas 7.x-3.x-dev (2011-ene-22), núcleo Drupal 7.x-dev (2011-ene-24) , profile2 7.x-1.0-beta1, referencias 7.x-2.x-dev (2011-ene-14), ctools 7.x-1.0-alpha2
No puedo descifrar qué causa exactamente este error.
Editar:
De acuerdo con http://php.net/manual/en/function.array-flip.php ,
array_flip () devuelve una matriz en orden inverso, es decir, las claves de trans se convierten en valores y los valores de trans se convierten en claves.
Tenga en cuenta que los valores de trans deben ser claves válidas, es decir, deben ser enteros o de cadena. Se emitirá una advertencia si un valor tiene el tipo incorrecto, y el par de clave / valor en cuestión no se invertirá.
He hecho el var_dump($ids);
antes de la línea 178 en entity.inc ( $passed_ids = !empty($ids) ? array_flip($ids) : FALSE;
)
Y me parece que el par clave / valor siempre está en el formato correcto (?).
array
0 =>
array
''nid'' => string ''6'' (length=1)
array
0 =>
array
''uid'' => string ''1'' (length=1)
array
0 => string ''0'' (length=1)
array
0 =>
array
''nid'' => string ''7'' (length=1)
array
0 =>
array
''nid'' => string ''4'' (length=1)
array
0 =>
array
''nid'' => string ''8'' (length=1)
¡Gracias por la publicación que funcionó para mí !, me encontré con este problema en Drupal 7 desde hace mucho tiempo y pude resolver el problema. Línea de fondo
"No pase valores de matriz a array_flip para ningún tipo de entidades, por ejemplo: si está intentando cargar y la entidad user_load () o field_collection_item_load () para cargar elementos de colección de campo, pase solo valores en la cadena en lugar de la matriz misma".
¡¡Gracias!!
¿Estás usando Insertar módulo? Ver http://drupal.org/node/850946 .
Cuando se trata de errores específicos como este, creo que es mejor buscar la cola de problemas en drupal.org que preguntar por SO.
Aquí hay una solución simple :)
Edite el archivo settings.php
y agregue esta línea
error_reporting(0);
Ejemplo de buen uso:
<?php
$user=user_load(arg(1));
$username=$user->name;
print strtolower(preg_replace(''/[^a-zA-Z0-9/-]/si'' , ''-'' , $username));
?>
El problema surge cuando usa el acceso de campo de grupos orgánicos (Grupos orgánicos 7.x-1.3)
Por lo general, puede desactivar ese submódulo a menos que haga un control de acceso a nivel de campo con OG.
Esto podría ser un problema de codificación incorrecta (por ejemplo, cargando entidades inválidas o ejecutando algún viejo código de Drupal 6 en Drupal 7):
- Si tienes módulos personalizados, revisa tu código para ver si hay un error común
- Uso no válido de entity_load() ,
- Al pasar matriz de objetos cargados a entity_load (),
- Verifique la API de la entidad y el módulo de ejemplo que proporciona la forma correcta de usar entidades en Drupal 7.
- Si está utilizando el módulo contrib, encuentre el error correcto en su contra y aplique el parche (si está disponible) o suba el nuevo.
Solución de problemas:
- Puede intentar volcar la
print_r(debug_backtrace())
llamando e imprimiendoprint_r(debug_backtrace())
, - Use su herramienta scm para volver al punto donde funcionaba bien y compare los cambios, para que finalmente encuentre dónde está el problema (por ejemplo,
gitk
,git log --patch
, etc.) - utilice el módulo de revisión del codificador para encontrar errores en su código después de la actualización (por ejemplo,
drush --contrib --no-empty --upgrade7x coder-review
). - Instale XDebug para rastrear su problema mediante el registro de rastreo o la depuración paso a paso.
Alternativamente, puede depurar su código definiendo el siguiente enlace temporal:
/**
* Implements hook_watchdog().
*/
function foo_watchdog($log_entry) {
if ($log_entry[''type''] == ''php'' && $log_entry[''severity''] <= WATCHDOG_WARNING) {
// Old school
var_dump(debug_backtrace()); // Optionally add: exit();
// Devel: Log the backtrace into temporary file: drupal_debug.txt
// Locate via: $ drush eval "echo file_directory_temp() . ''/drupal_debug.txt''"
function_exists(''dd'') && dd(debug_backtrace());
}
}
Borre la memoria caché antes de probarla.
Imprimirá la traza inversa en cada advertencia de PHP o error con argumentos, para que pueda encontrar los parámetros no válidos que se pasaron al núcleo de Drupal.
Esto también puede suceder cuando se llama a entity_load con una matriz que no es una matriz de identificador de entidad como segundo argumento - ver http://api.drupal.org/api/drupal/includes--common.inc/function/entity_load/7 y http://drupal.org/node/1160566 para entender por qué.
La causa más común de este error es usar una función something_load () con una matriz como argumento. Esto ya no es soportado porque las funciones load_multiple () necesitan ser usadas para esto ahora.
Ejemplo en D6:
<?php
// Using array with the id was already discouraged in D6 but still worked.
$user = user_load(array(''uid'' => 1));
$user = user_load(array(''name'' => ''admin''));
?>
Drupal 7:
<?php
// Argument to a load() function *must* be a single id
$user = user_load(1);
// Querying for another attribute is a bit more complex.
// Note that using reset(user_load_multiple() directly is not E_STRICT compatible.
$users = user_load_multiple(array(), array(''name'' => ''admin''));
$user = reset($users);
?>
Entonces, la forma más fácil de detectar esto es buscar "_load (array".
Me encontré con el mismo error array_flip durante el fin de semana, tratando de actualizar un módulo personalizado a Drupal 7. El problema es que una matriz anidada se pasa a DrupalDefaultEntityController, pero está esperando una matriz simple de enteros o cadenas. En mi caso, estaba pasando una matriz anidada a EntityFieldQuery, cuando solo quiere una matriz de enteros.
Para rastrear mejor el código que llama a DrupalDefaultEntityController, intente insertar lo siguiente antes de la línea 178 en entity.inc:
drupal_set_message(var_export(debug_backtrace(), TRUE));
... o preferiblemente, instale el módulo Devel e intente insertar lo siguiente en su lugar:
dpm( debug_backtrace() );
Vi un problema similar en nuestro uso del último módulo page_title. Por ahora, simplemente desactivamos el módulo y limpiamos el error.
Ver: http://www.newblood.com/blog/2011/04/26/drupal-7-error-in-page-title-module/