Ottieni il valore di un campo utente personalizzato


13

Ho un modulo personalizzato che deve visualizzare un valore predefinito da un campo utente personalizzato. Il campo è stato creato in / admin / config / people / account / fields e il suo nome macchina è field_r_period_length_sec.

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

Tuttavia, il valore non viene visualizzato e viene visualizzato questo errore:

Avviso: proprietà non definita: Drupal \ Core \ Session \ AccountProxy :: $ field_r_period_length_sec

Che cosa sto facendo di sbagliato?

Risposte:


17

La risposta di Berdir mi ha dato un termine di ricerca che mi ha procurato questo:

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

Dopo un po 'di tentativi ed errori, questo è il codice che funziona, nel caso in cui chiunque abbia bisogno di:

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

Per più valori, utilizzare

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

1
Per chiunque desideri rimuovere l'avviso da PHPStorm in $r_period = $user->field_r_period_length_sec->value;aggiungi questo commento /** @var $user \Drupal\user\Entity\User */sopra$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Neil Nand

3

L'oggetto utente corrente non è un'entità utente. Devi caricare l'utente con quell'ID per accedere a qualsiasi campo tranne le informazioni specificate da AccountInterface.


2

Non so da quando queste risposte non funzionano più, ma con Drupal 8.5 la soluzione sopra riportata ritorna sempre nulla.

Dopo l'indagine, la soluzione per accedere al campo personalizzato da un profilo utente è:

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

Quindi puoi farlo

$activeProfile->field_xxx->value

Grazie! Sono stato in grado di ottenere un campo specifico dal profilo utente. Ma mi chiedo come è possibile impostare / aggiornare il nome di un campo profilo? TIA
John Rey Tanquinco,

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

1

Entity::load()si basa su \Drupal::entityManager();quale è deprecato .

Un modo migliore per farlo è utilizzando entityTypeManager ().

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.