it-swarm.com.de

Ruft den Wert eines benutzerdefinierten Benutzerfelds ab

Ich habe ein benutzerdefiniertes Formular, das einen Standardwert aus einem benutzerdefinierten Benutzerfeld anzeigen muss. Das Feld wurde unter/admin/config/people/accounts/fields erstellt und der Computername lautet field_r_period_length_sec.

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

Der Wert wird jedoch nicht angezeigt und ich erhalte folgende Fehlermeldung:

Hinweis: Undefinierte Eigenschaft: Drupal\Core\Session\AccountProxy :: $ field_r_period_length_sec

Was mache ich falsch?

13
matt9292

Berdirs Antwort gab mir einen Suchbegriff, der mir Folgendes einbrachte:

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

Nach einigem Ausprobieren ist dies der Code, der funktioniert, falls jemand anderes Folgendes benötigt:

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

Verwenden Sie für mehrere Werte

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

Das aktuelle Benutzerobjekt ist keine Benutzerentität. Sie müssen den Benutzer mit dieser ID laden, um auf ein Feld mit Ausnahme der durch AccountInterface angegebenen Informationen zugreifen zu können.

3
Berdir

Ich weiß nicht, wann diese Antworten nicht mehr funktionieren, aber mit Drupal 8.5) gibt die obige Lösung immer null zurück.

Nach der Untersuchung lautet die Lösung für den Zugriff auf ein benutzerdefiniertes Feld über ein Benutzerprofil:

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

Dann können Sie tun

$activeProfile->field_xxx->value
2

Entity::load() basiert auf \Drupal::entityManager();, was veraltet ist.

Ein besserer Weg, dies zu tun, ist die Verwendung von entityTypeManager ().

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
1
powpow12