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?
$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());
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
.fuente
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:
Entonces puedes hacer
fuente
Entity::load()
se basa fuera de lo\Drupal::entityManager();
cual está en desuso .Una mejor manera de hacer esto es mediante entityTypeManager ().
fuente