Ich habe ein neues Feld auf der Benutzerseite "Feld verwalten" hinzugefügt. Dies ist ein Beispiel für ein ganzzahliges Feld mit mehreren Zahlen. (Wir können mehrere Ganzzahlen eingeben)
Ich habe das Profil des Administrators bearbeitet. Ich habe einige Werte in dieses Feld eingefügt (und gespeichert):
42
66
23
77
In einem benutzerdefinierten Modul lade ich den aktuellen Benutzer und möchte alle Werte meines ganzzahligen Ganzzahlfelds anzeigen:
// Load the current user.
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
// Get field data from that user.
$mycustomfield = $user->get('field_mycustomfield');
Wenn ich aber $ mycustomfield-> getValue () drucke, erhalte ich nur den ersten Wert:
// Display values
kint($mycustomfield->getValue()); // return only 42, but I want get 42, 66, 23, 77
Wie kann ich ALLE Werte eines benutzerdefinierten Felds abrufen?
Vielen Dank :)
BEARBEITEN
Ich versuche das ...
// Load the current user.
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
// Set and save field data from that user.
$user->get('field_mycustomfield')->setValue(array(1,2,3,4,5));
$user->save();
// And display
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
$user_mycustomfield = $user->get('field_mycustomfield')->getValue();
kint($user_mycustomfield); // print array(1.2.3.4.5) x)
Wenn ich bei einem neuen Benutzer mehrere Werte auf seiner Seite zum Bearbeiten des Benutzerprofils festlege, gibt getValue () nur den ersten Wert zurück
Wenn ich jedoch mehrere Werte über die API einstelle, kann ich alle Werte mit getValue abrufen
Es ist wirklich seltsam ..
Antworten:
quelle
Drupal-Felder werden von der
ItemList
Klasse dargestellt (unabhängig davon, ob sie mehrwertig sind oder nicht). Die Convenience-MethodegetValue()
durchläuft diegetValue()
Methode jedes Elements , um eine Array-Darstellung des Datenwerts zu erstellen.Um eine Zeichenfolgendarstellung aller Elemente in der Liste abzurufen, können Sie verwenden
ItemList::getString()
, die alle Listenelemente und AufrufegetString
() auf jedem Element durchläuft und sie dann mithilfe", "
von Klebstoff implodiert .Also, für Ihr Beispiel:
wird ausgegeben
quelle