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?
$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());
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
.quelle
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:
Dann können Sie tun
quelle
Entity::load()
basiert darauf,\Drupal::entityManager();
dass veraltet ist .Ein besserer Weg, dies zu tun, ist die Verwendung von entityTypeManager ().
quelle