Ich habe kürzlich mein Modul zu Drupal7 (auf PHP Version 5.3.1) migriert und erhalte folgende Fehler:
* 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).
Ich habe auch versucht, andere Module und Core auf die neuesten Versionen zu aktualisieren, wie hier erwähnt http://drupal.org/node/1022736
entity 7.x-1.x-dev (2011-Jan-24), Ansichten 7.x-3.x-dev (2011-Jan-22), Drupal-Kern 7.x-dev ( 2011-Jan-24), Profil2 7.x-1.0-beta1, Referenzen 7.x-2.x-dev (2011-Jan-14), Werkzeuge 7.x-1.0- alpha2
Ich kann nicht herausfinden, was genau diesen Fehler verursacht.
Bearbeiten:
Laut http://php.net/manual/de/function.array-flip.php ,
array_flip () gibt ein Array in Flip-Reihenfolge zurück, d. h. Schlüssel von trans Werte werden und Werte aus Trans werden Schlüssel.
Beachten Sie, dass die Werte von trans gültige Schlüssel sein müssen, d. H. Sie müssen entweder eine ganze Zahl oder eine Zeichenfolge sein. Eine Warnung wird ausgegeben, wenn ein value hat den falschen Typ und das betreffende Schlüssel/Wert-Paar wird nicht umgedreht werden.
Ich habe das var_dump($ids);
vor Zeile 178 in entity.inc gemacht ($passed_ids = !empty($ids) ? array_flip($ids) : FALSE;
)
Und es scheint mir, dass das Schlüssel/Wert-Paar immer im richtigen Format (?) Ist.
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)
Die häufigste Ursache für diesen Fehler ist die Verwendung einer something_load () - Funktion mit einem Array als Argument. Dies wird nicht mehr unterstützt, da hierfür jetzt die Funktionen load_multiple () verwendet werden müssen.
Beispiel in 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);
?>
Die einfachste Möglichkeit, diese zu finden, ist die Suche nach "_load (array").
Ich bin während des Wochenendes in denselben Array_flip-Fehler gestoßen und habe versucht, ein benutzerdefiniertes Modul auf Drupal 7 aufzurüsten. In meinem Fall habe ich ein verschachteltes Array an EntityFieldQuery übergeben, wenn es nur ein Array von ganzen Zahlen haben soll.
Um den Code, der DrupalDefaultEntityController aufruft, besser aufzuspüren, fügen Sie Folgendes vor Zeile 178 in entity.inc ein:
drupal_set_message(var_export(debug_backtrace(), TRUE));
... oder installieren Sie vorzugsweise das Modul Devel und fügen Sie stattdessen Folgendes ein:
dpm( debug_backtrace() );
Das Problem tritt auf, wenn Sie den Feldzugriff für organische Gruppen verwenden (Organic Groups 7.x-1.3).
Sie können dieses Untermodul normalerweise deaktivieren, es sei denn, Sie haben eine Zugriffskontrolle auf Feldebene mit OG.
Dies kann auch passieren, wenn Sie entity_load mit einem Array aufrufen, das kein Array von Entity-IDs als zweites Argument ist - siehe http://api.drupal.org/api/drupal/includes--common.inc/function/entity_load/7 und http://drupal.org/node/1160566 , um zu verstehen, warum.
Bei der Verwendung des neuesten page_title-Moduls ist ein ähnliches Problem aufgetreten. Im Moment haben wir das Modul einfach deaktiviert und den Fehler behoben.
Siehe: http://www.newblood.com/blog/2011/04/26/drupal-7-error-in-page-title-module/
Dies könnte ein Problem der fehlerhaften Codierung sein (z. B. Laden ungültiger Entitäten oder Ausführen von altem Drupal 6-Code in Drupal 7):
Fehlerbehebung:
print_r(debug_backtrace())
aufrufen und drucken.gitk
, git log --patch
usw.).drush --contrib --no-empty --upgrade7x coder-review
).Alternativ können Sie Ihren Code debuggen, indem Sie den folgenden temporären Hook definieren:
/**
* 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());
}
}
Löschen Sie den Cache, bevor Sie ihn testen.
Bei jeder PHP - Warnung oder -Fehlermeldung wird der Backtrace mit Argumenten gedruckt, sodass Sie Ihre ungültigen Parameter finden können, die an den Drupal-Kern übergeben wurden.
Verwenden Sie Insert Module? Siehe http://drupal.org/node/850946 .
Wenn es um bestimmte Fehler wie diese geht, ist es meiner Meinung nach besser, die Problemliste unter drupal.org zu durchsuchen, als nach SO zu fragen.
Beispiel für eine gute Verwendung:
<?php
$user=user_load(arg(1));
$username=$user->name;
print strtolower(preg_replace('/[^a-zA-Z0-9\-]/si' , '-' , $username));
?>
Ich habe diese Nachricht auch erhalten, als ich versehentlich versucht habe, mehrere Knoten über node_load_multiple ($ nids) zu laden, wobei $ nids kein Array von node-ids war.
Verwenden Sie beispielsweise das Ergebnis einer EntityFieldQuery und den Aufruf von node_load_multiple ($ result ['node']) anstelle von node_load_multiple (array_keys ($ result ['node'])).