Obtenga el valor de un campo de usuario personalizado


13

Tengo un formulario personalizado que necesita mostrar un valor predeterminado de un campo de usuario personalizado. El campo se creó en / admin / config / people / accounts / fields y su nombre de máquina es field_r_period_length_sec.

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

Sin embargo, el valor no se muestra y aparece este error:

Aviso: Propiedad no definida: Drupal \ Core \ Session \ AccountProxy :: $ field_r_period_length_sec

¿Qué estoy haciendo mal?

Respuestas:


17

La respuesta de Berdir me dio un término de búsqueda que me dio esto:

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

Después de un poco de prueba y error, este es el código que funciona, en caso de que alguien más necesite:

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

Para valores múltiples, use

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

1
Para cualquiera que quiera eliminar la advertencia de PHPStorm, $r_period = $user->field_r_period_length_sec->value;agregue este comentario /** @var $user \Drupal\user\Entity\User */arriba$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Neil Nand

3

El objeto de usuario actual no es una entidad de usuario. Debe cargar al usuario con esa ID para acceder a cualquier campo excepto la información especificada por AccountInterface.


2

No sé desde cuándo estas respuestas ya no funcionan, pero con Drupal 8.5 la solución anterior devuelve nulo todo el tiempo.

Después de la investigación, la solución para acceder al campo personalizado desde un perfil de usuario es:

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

Entonces puedes hacer

$activeProfile->field_xxx->value

¡Gracias! Pude obtener un campo específico del perfil de usuario. Pero me pregunto cómo puede configurar / actualizar un nombre de campo de perfil. TIA
John Rey Tanquinco

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

1

Entity::load()se basa fuera de lo \Drupal::entityManager();cual está en desuso .

Una mejor manera de hacer esto es mediante entityTypeManager ().

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.