Das Feld getvalue () mehrerer Werte gibt nur den ersten Wert zurück

6

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

matthieu lopez
quelle
1
Ich denke, es ist ein Caching-Problem. Sie haben den Code wahrscheinlich nicht im angezeigten Benutzer, sondern an einer anderen Stelle abgelegt. In diesem Fall haben Sie kein Cache-Tag für den Benutzer, wenn Sie es nicht selbst hinzufügen.
4k4
Ich habe nur einen Benutzer (den Administrator), vielleicht haben Sie Recht mit dem Caching-Problem, aber ich verstehe nicht, warum ich den ersten Wert erhalte (Caching-Problem = kein Wert? Warum der erste, aber nicht der nächste Wert?)
matthieu lopez
Um welchen Feldtyp handelt es sich? Werden die Werte im Bearbeitungsformular wieder angezeigt? Versuchen Sie $ user_mycustomfield [1] -> value und so weiter.
Berdir
@ user2137454, ich nahm an, dass die zwischengespeicherte Version einen Wert hatte. Wenn Sie zwei Ergebnisse mit demselben Code haben, wird meistens zwischengespeichert.
4k4
Stellen Sie bei Drupal immer sicher, dass Sie sich aufgrund des Caches keine Illusionen machen. Spülen Sie es, laden Sie es neu oder drush es. Aber lassen Sie es los, bevor Sie zu einem Schluss kommen. Sei es Zweig, CSS oder JS.
Vishal Kumar Sahu

Antworten:

2
$user->get('field_mycustomfield')->getValue();
Karthikeyan Manivasagam
quelle
1

Drupal-Felder werden von der ItemListKlasse dargestellt (unabhängig davon, ob sie mehrwertig sind oder nicht). Die Convenience-Methode getValue()durchläuft die getValue()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 Aufrufe getString() auf jedem Element durchläuft und sie dann mithilfe ", "von Klebstoff implodiert .

Also, für Ihr Beispiel:

var_dump($user->field_mycustomfield->getString());

wird ausgegeben

string(14) "42, 66, 23, 77"
Aaronbauman
quelle