รับค่าของฟิลด์ผู้ใช้ที่กำหนดเอง


13

ฉันมีรูปแบบกำหนดเองที่ต้องการแสดงค่าเริ่มต้นจากเขตข้อมูลผู้ใช้ที่กำหนดเอง ฟิลด์ถูกสร้างภายใต้ / admin / config / people / accounts / field และชื่อเครื่องคือ 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
สำหรับใครก็ตามที่ต้องการลบคำเตือนจาก PHPS รูปแบบในการ$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 การแก้ปัญหาข้างต้นคืนค่าเป็นโมฆะตลอดเวลา

หลังจากตรวจสอบวิธีแก้ไขปัญหาเพื่อเข้าถึงฟิลด์ที่กำหนดเองจากโปรไฟล์ผู้ใช้คือ:

$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', ค่า)
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.