Nhận giá trị của trường người dùng tùy chỉnh


13

Tôi có một biểu mẫu tùy chỉnh cần hiển thị giá trị mặc định từ trường người dùng tùy chỉnh. Trường được tạo trong / admin / config / people / Tài khoản / trường và tên máy của nó là field_r_apse_length_sec.

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

Tuy nhiên, giá trị không hiển thị và tôi gặp lỗi này:

Lưu ý: Thuộc tính không xác định: Drupal \ Core \ Session \ AccountProxy :: $ field_r_apse_length_sec

Tôi đang làm gì sai?

Câu trả lời:


17

Câu trả lời của Berdir đã cho tôi một thuật ngữ tìm kiếm giúp tôi hiểu điều này:

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

Sau một chút thử nghiệm và lỗi, đây là mã hoạt động, trong trường hợp bất kỳ ai khác cần:

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

Đối với nhiều giá trị, sử dụng

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

1
Đối với bất kỳ ai muốn xóa cảnh báo khỏi PHPStorm, hãy $r_period = $user->field_r_period_length_sec->value;thêm nhận xét này /** @var $user \Drupal\user\Entity\User */ở trên$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Neil Nand

3

Đối tượng người dùng hiện tại không phải là một thực thể người dùng. Bạn cần tải người dùng có ID đó để truy cập vào bất kỳ trường nào ngoại trừ thông tin được chỉ định bởi AccountInterface.


2

Tôi không biết từ khi nào những câu trả lời này không còn hiệu quả nữa, nhưng với Drupal 8.5, giải pháp trên hoàn toàn không có giá trị.

Sau khi điều tra, giải pháp để truy cập trường tùy chỉnh từ hồ sơ người dùng là:

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

Sau đó bạn có thể làm

$activeProfile->field_xxx->value

Cảm ơn! Tôi đã có thể nhận được trường cụ thể từ hồ sơ người dùng. Nhưng tôi tự hỏi làm thế nào bạn có thể thiết lập / cập nhật một tên trường hồ sơ? TIA
John Rey Tanquinco

1
$ profile-> set ('field_name', value)
Denis Kolmerschlag

1

Entity::load()được dựa trên \Drupal::entityManager();đó là không dùng nữa .

Một cách tốt hơn để làm điều này là bằng cách sử dụng entityTypeManager ().

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.