Ruft den Wert eines benutzerdefinierten Benutzerfelds ab


13

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?

Antworten:


17

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();

1
Für alle, die die Warnung von PHPStorm entfernen möchten, $r_period = $user->field_r_period_length_sec->value;fügen Sie diesen Kommentar /** @var $user \Drupal\user\Entity\User */oben hinzu$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Neil Nand

3

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


2

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

Vielen Dank! Ich konnte ein bestimmtes Feld aus dem Benutzerprofil abrufen. Aber ich frage mich, wie Sie einen Profilfeldnamen festlegen / aktualisieren können. TIA
John Rey Tanquinco

1
$ profile-> set ('Feldname', Wert)
Denis Kolmerschlag

1

Entity::load()basiert darauf, \Drupal::entityManager();dass 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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.