Özel bir kullanıcı alanının değerini alma


13

Özel bir kullanıcı alanından varsayılan bir değer görüntülemek gereken özel bir form var. Alan / admin / config / people / accounts / fields altında oluşturuldu ve makine adı field_r_period_length_sec.

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

Ancak, değer göstermiyor ve bu hatayı alıyorum:

Uyarı: Tanımsız özellik: Drupal \ Core \ Session \ AccountProxy :: $ field_r_period_length_sec

Neyi yanlış yapıyorum?

Yanıtlar:


17

Berdir'in yanıtı bana bunu sağlayan bir arama terimi verdi:

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

Biraz deneme yanılma işleminden sonra, başka birinin ihtiyacı olması durumunda çalışan kod budur:

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

Birden çok değer için şunu kullanın:

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

1
Yukarıdaki $r_period = $user->field_r_period_length_sec->value;yorumu ekleyerek PHPStorm'daki uyarıyı kaldırmak isteyen herkes için/** @var $user \Drupal\user\Entity\User */$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Neil Nand

3

Geçerli kullanıcı nesnesi bir kullanıcı varlığı değil. Tarafından belirtilen bilgiler dışında herhangi bir alana erişmek için kullanıcıyı bu kimliğe yüklemeniz gerekir AccountInterface.


2

Bilmiyorum çünkü bu cevaplar artık işe yaramıyor, ancak Drupal 8.5 ile yukarıdaki çözüm her zaman null.

Soruşturmadan sonra, bir kullanıcı profilinden özel alana erişim çözümü:

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

Sonra yapabilirsin

$activeProfile->field_xxx->value

Teşekkürler! Kullanıcı profilinden belirli bir alanı alabildim. Ancak bir profil alanı adını nasıl ayarlayabileceğinizi / güncelleyebileceğinizi merak ediyorum? TIA
John Rey Tanquinco

1
$ profile-> set ('field_name', değer)
Denis Kolmerschlag

1

Entity::load()kapalı dayanır arasında \Drupal::entityManager();olan bir kaldırıldı .

Bunu yapmanın daha iyi bir yolu entityTypeManager () kullanmaktır.

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.