获取自定义用户字段的值


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;

但是,该值未显示,并且出现此错误:

注意:未定义的属性:Dr​​upal \ Core \ Session \ AccountProxy :: $ field_r_period_length_sec

我究竟做错了什么?

Answers:


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 '18年

1

Entity::load()的是基于过\Drupal::entityManager();其被弃用

更好的方法是使用entityTypeManager()。

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.