it-swarm.com.de

array_flip (): Kann nur STRING- und INTEGER-Werte umkehren! in DrupalDefaultEntityController-> load ()

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)
37

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").

86
Berdir

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() );
10
Matt V.

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.

http://drupal.org/node/1102570#comment-5626946

6

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.

3
Evan Donovan

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/

1
Jeremy

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): 

  • Wenn Sie benutzerdefinierte Module haben, überprüfen Sie Ihren Code auf häufige Fehler
    • Ungültige Verwendung von entity_load () ,
    • Array der geladenen Objekte an entity_load () übergeben,
    • Check Entity API und Beispielmodul das die richtige Verwendung von Entities in Drupal 7 bietet.
  • Wenn Sie das Contrib-Modul verwenden, finden Sie den richtigen Fehler und wenden Sie den Patch an (falls verfügbar) oder machen Sie den neuen Fehler.

Fehlerbehebung:

  • Sie können versuchen, die Rückverfolgung abzuspeichern, indem Sie print_r(debug_backtrace()) aufrufen und drucken.
  • Verwenden Sie Ihr scm-Tool, um zu dem Punkt zurückzukehren, an dem es einwandfrei funktioniert hat, und vergleichen Sie die Änderungen. So finden Sie eventuell heraus, wo das Problem liegt (z. B. gitk, git log --patch usw.).
  • bitte verwenden Sie das Modul Coder Review , um nach dem Update nach Fehlern in Ihrem Code zu suchen (z. B. drush --contrib --no-empty --upgrade7x coder-review).
  • Installieren Sie XDebug , um Ihr Problem durch ein Ablaufverfolgungsprotokoll oder schrittweisees Debugging zu verfolgen.

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.

0
kenorb

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.

0
marcvangend

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));
?>
0
warmth

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'])).

0
Enno