カスタムユーザーフィールドのデフォルト値を表示する必要があるカスタムフォームがあります。フィールドは/ 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
何が悪いのですか?
ベルディールの答えは私にこれを得る検索語を与えました:
$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();
現在のユーザーオブジェクトはユーザーエンティティではありません。 AccountInterface
で指定された情報以外のフィールドにアクセスするには、そのIDを持つユーザーをロードする必要があります。
これらの回答が機能しなくなったときはわかりませんが、Drupal 8.5を使用すると、上記のソリューションは常にnullを返します。
調査後、ユーザープロファイルからカスタムフィールドにアクセスするためのソリューションは次のとおりです。
$activeProfile = \Drupal::getContainer()
->get('entity_type.manager')
->getStorage('profile')
->loadByUser(User::load([uid]), '[profile_machine_name]');
その後、行うことができます
$activeProfile->field_xxx->value
Entity::load()
は\Drupal::entityManager();
に基づいています 非推奨 です。
これを行うより良い方法は、entityTypeManager()を使用することです。
$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;