Dapatkan nilai bidang pengguna khusus

13

Saya memiliki formulir khusus yang perlu menampilkan nilai default dari bidang pengguna kustom. Bidang ini dibuat di bawah / admin / config / people / accounts / bidang dan nama mesinnya adalah field_r_ Period_length_sec.

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

Namun, nilainya tidak muncul dan saya mendapatkan kesalahan ini:

Pemberitahuan: Properti tidak terdefinisi: Drupal \ Core \ Session \ AccountProxy :: $ field_r_ Period_length_sec

Apa yang saya lakukan salah?

matt9292
sumber

Jawaban:

17

Jawaban Berdir memberi saya istilah pencarian yang memberi saya ini:

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

Setelah sedikit coba-coba, ini adalah kode yang berfungsi, jika diperlukan orang lain:

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

Untuk beberapa nilai, gunakan

$r_period = $user->get('field_r_period_length_sec')->getValue();
matt9292
sumber
1
Bagi siapa pun yang ingin menghapus peringatan dari PHPStorm di $r_period = $user->field_r_period_length_sec->value;tambahkan komentar ini di /** @var $user \Drupal\user\Entity\User */atas$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Neil Nand
3

Objek pengguna saat ini bukan entitas pengguna. Anda perlu memuat pengguna dengan ID itu untuk mengakses bidang apa pun kecuali informasi yang ditentukan oleh AccountInterface.

Berdir
sumber
2

Saya tidak tahu sejak kapan jawaban ini tidak berfungsi lagi, tetapi dengan Drupal 8.5 solusi di atas mengembalikan nol sepanjang waktu.

Setelah penyelidikan, solusi untuk mengakses bidang khusus dari profil pengguna adalah:

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

Maka Anda bisa melakukannya

$activeProfile->field_xxx->value
Denis Kolmerschlag
sumber
Terima kasih! Saya bisa mendapatkan bidang tertentu dari profil pengguna. Tetapi saya bertanya-tanya bagaimana Anda bisa mengatur / memperbarui nama bidang profil? TIA
John Rey Tanquinco
1
$ profile-> set ('field_name', value)
Denis Kolmerschlag
1

Entity::load()didasarkan dari \Drupal::entityManager();yang sudah usang .

Cara yang lebih baik untuk melakukan ini adalah dengan menggunakan entityTypeManager ().

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
powpow12
sumber