カスタムユーザーフィールドの値を取得する


13

カスタムユーザーフィールドのデフォルト値を表示する必要があるカスタムフォームがあります。フィールドは/ admin / config / people / accounts / fieldsの下に作成され、そのマシン名はfield_r_period_length_secです。

//get user
$userCurrent = \Drupal::currentUser();
$uid = $userCurrent->id();
$r_period = $userCurrent->field_r_period_length_sec;

ただし、値は表示されず、次のエラーが発生します。

通知:未定義のプロパティ:Drupal \ Core \ Session \ AccountProxy :: $ field_r_period_length_sec

何が悪いのですか?

回答:


17

ベルディールの答えは私にこれを得る検索語を与えました:

$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());

少し試行錯誤した後、これは他の誰かが必要な場合に機能するコードです:

$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
$r_period = $user->field_r_period_length_sec->value;

複数の値の場合は、

$r_period = $user->get('field_r_period_length_sec')->getValue();

1
PHPStormから警告を削除したい人は、上記の$r_period = $user->field_r_period_length_sec->value;コメントを追加してください/** @var $user \Drupal\user\Entity\User */$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Neil Nand

3

現在のユーザーオブジェクトはユーザーエンティティではありません。で指定された情報以外のフィールドにアクセスするには、そのIDを持つユーザーをロードする必要がありますAccountInterface


2

これらの回答が機能しなくなったときはわかりませんが、Drupal 8.5では、上記のソリューションは常にnullを返します。

調査後、ユーザープロファイルからカスタムフィールドにアクセスするためのソリューションは次のとおりです。

$activeProfile = \Drupal::getContainer()
  ->get('entity_type.manager')
  ->getStorage('profile')
  ->loadByUser(User::load([uid]), '[profile_machine_name]');

その後、行うことができます

$activeProfile->field_xxx->value

ありがとう!ユーザープロファイルから特定のフィールドを取得できました。しかし、どのようにしてプロファイルフィールド名を設定/更新できるのでしょうか。TIA
ジョンレイタンキンコ2018

1
$ profile-> set( 'field_name'、value)
Denis Kolmerschlag

1

Entity::load()に基づい\Drupal::entityManager();ており、非推奨です

これを行うより良い方法は、entityTypeManager()を使用することです。

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.