複数値フィールドのgetvalue()は最初の値のみを返します


6

フィールド管理ユーザーページに新しいフィールドを追加しました。これは、サンプルの複数値フィールドです。(複数の整数を入力できます)

管理者ユーザーのプロファイルを編集しました。このフィールドにいくつかの値を追加(および保存)しました。

42
66
23
77

カスタムモジュールで、現在のユーザーを読み込んで、整数の複数値フィールドのすべての値を表示します。

// Load the current user.
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());

// Get field data from that user.
$mycustomfield = $user->get('field_mycustomfield');

しかし、$ mycustomfield-> getValue()を出力すると、最初の値のみが取得されます。

// Display values
kint($mycustomfield->getValue()); // return only 42, but I want get 42, 66, 23, 77

カスタムフィールドのすべての値を取得するにはどうすればよいですか?

ありがとう:)

編集

私はこれを試します...

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

新しいユーザーの場合、ユーザープロファイル編集ページからいくつかの値を設定すると、getValue()は最初の値のみを返します

しかし、APIを介して複数の値を設定すると、getValueですべての値を取得できます

それは本当に奇妙です。


1
キャッシングの問題だと思います。おそらく、表示されたユーザーではなく、別の場所にコードを配置します。その場合、自分で追加しない限り、ユーザーのキャッシュタグはありません。
4k4

私は1人のユーザー(管理者)しかいませんが、キャッシュの問題は正しいかもしれませんが、なぜ最初の値が得られるのかわかりません(キャッシュの問題=値なし?なぜ最初の値で次の値ではないのですか?)
matthieu lopez

それはどのフィールドタイプですか?値は編集フォームに再び表示されますか?$ user_mycustomfield [1]-> valueなどを試してください。
Berdir 2016

@ user2137454、私はキャッシュされたバージョンが1つの値を持っていると仮定しました。ほとんどの場合、同じコードで2つの結果がある場合、それはキャッシュされます。
4k4

Drupalでは、キャッシュが原因で幻想になっていないことを常に確認してください。フラッシュ、リロード、またはドラッシングしてください。しかし、結論に至る前にそれを取り除いてください。小枝でも、CSSでも、JSでも。
Vishal Kumar Sahu

回答:



1

DrupalフィールドはItemListクラスによって表されます(それらが複数値かどうかに関係なく)。コンビニエンスメソッドはgetValue()、各項目のgetValue()メソッドを反復処理して、データ値の配列表現を構築します。

リスト内のすべての項目の文字列表現を取得するには、を使用できますItemList::getString()。これは、すべてのリスト項目を反復処理しgetString、それぞれに対して()を呼び出してから", "、接着剤を使用してそれらを爆破します。

したがって、あなたの例では:

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

出力されます

string(14) "42, 66, 23, 77"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.