사용자 정의 사용자 필드의 값을 가져옵니다


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

Berdir의 대답은 나에게 이것을 얻은 검색어를 주었다.

$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
John Rey Tanquinco

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.