$account = \Drupal::currentUser()
は、ユーザーオブジェクトを_$account
_にロードしますが、ユーザーオブジェクトで作成したカスタムフィールドに(管理UIを介して)アクセスするにはどうすればよいですか?
dpm($account)
を使用すると、カスタムフィールドが表示されません。
\Drupal::currentUser()
はDrupal\Core\Session\AccountInterface
オブジェクトを返します。これは完全なユーザー(Drupal\user\UserInterface
)でもかまいませんが、現在のところ、デフォルトの認証方法ではそうではありません。
これを使用して、ユーザーエンティティとすべてのフィールドを取得します。
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())
D7の動作はまったく同じでしたが、違いはD7の場合と同じです。これらは単に異なるstdClassのものであり、2つを区別するための明示的なインターフェイスがあります。
そして、それはそのオブジェクトからそれを取得する方法です:
// Load the current user.
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
// Get field data from that user.
$website = $user->get('field_website')->value;
$body = $user->get('body')->value;
// Some default getters include.
$email = $user->get('mail')->value;
$name = $user->get('name')->value;
$uid= $user->get('uid')->value;
Drupal::currentUser()
は、 _Drupal\Core\Session\AccountProxyInterface
_ を実装するオブジェクトを返します。これは、 _Drupal\user\UserInterface
_ を実装するオブジェクトであるUser::load()
から返されるものとは異なります。
つまり、フィールドがロードされた完全なUser
オブジェクトを取得できるとは限りませんが、User
オブジェクトを取得できるとは限りません。結果として、User::get()
などのUser
クラスから使用可能ないくつかのメソッドを呼び出します。 AccountInterface::id()
を呼び出すと、ユーザーIDが返されます。これで、完全なUser
オブジェクトをUser::load()
でロードし、エンティティにアタッチされているすべてのフィールドモジュールにアクセスできます。
_use Drupal\Core\Session\AccountProxyInterface;
use Drupal\user\Entity\User;
$account = User::load(\Drupal::currentUser()->id());
_
_$account
_を使用すると、ユーザーアカウントに関連付けられているすべてのフィールドにアクセスできます。