$account = \Drupal::currentUser()
lädt das Benutzerobjekt in $account
, aber wie greife ich auf benutzerdefinierte Felder zu, die ich auf dem Benutzerobjekt erstellt habe (über die Benutzeroberfläche des Administrators)?
Mit dpm($account)
kann ich keines meiner benutzerdefinierten Felder sehen.
\Drupal::currentUser()->id()
und dann eine Datenbankabfrage machen, aber in D7 waren sie schon auf dem Objekt?Antworten:
\Drupal::currentUser()
Gibt einDrupal\Core\Session\AccountInterface
Objekt zurück. Das könnte ein Vollbenutzer sein (das wäre einDrupal\user\UserInterface
), aber im Moment ist dies für die Standardauthentifizierungsmethode nicht der Fall .Verwenden Sie diese Option, um die Benutzerentität und alle Felder abzurufen:
D7 hatte genau das gleiche Verhalten, der Unterschied ist nur, dass es sich in D7 einfach um verschiedene stdClass'es handelte. Jetzt haben Sie explizite Schnittstellen, um die beiden zu unterscheiden.
quelle
$GLOBALS['user']
ist kein vollständig geladenes Benutzerobjekt enthalten. Es enthält nur die Informationen, die in der Benutzertabelle enthalten sind.Und hier ist, wie man es aus diesem Objekt herausholt:
quelle
$user->id()
.Drupal::currentUser()
Gibt ein implementierendes Objekt zurückDrupal\Core\Session\AccountProxyInterface
. Das ist etwas anderes als das, was von zurückgegeben wurdeUser::load()
, einem Objekt, das implementiertDrupal\user\UserInterface
.Dies bedeutet, dass Sie nicht sicher sind, dass Sie ein vollständiges
User
Objekt mit geladenen Feldern erhalten, aber es ist nicht einmal sicher, dass Sie einUser
Objekt erhalten. Als Konsequenz rufen Sie einige der in derUser
Klasse verfügbaren Methoden auf, zUser::get()
. Sie können anrufenAccountInterface::id()
, wodurch die Benutzer-ID zurückgegeben wird. Damit können Sie dann das gesamteUser
Objekt mitUser::load()
allen an die Entität angehängten Feldmodulen laden und haben Zugriff darauf.Mit
$account
können Sie dann auf alle mit einem Benutzerkonto verknüpften Felder zugreifen.quelle
$account = \Drupal::currentUser(): dpm($account);
keine benutzerdefinierten Felder angezeigt? Diese Antwort gibt jedoch an, wie auf Benutzerentitätsfelder zugegriffen werden soll. Da die Frage nicht sagt, auf welche Felder das OP zugreifen möchte, sagt die Antwort nur, welche Methode verwendet werden soll. Es gibt keine Antworten von @batigolix.Hier ist ein Einzeiler mit der API-Funktion:
Danach sind die Benutzerfelder zugänglich.
quelle