$account = \Drupal::currentUser()ユーザーオブジェクトをに読み込みますが、ユーザーオブジェクトに$account作成したカスタムフィールドにアクセスするにはどうすればよいですか(管理UIを使用)?
dpm($account)私は私のカスタムフィールドのいずれかを見ることができません。
\Drupal::currentUser()->id()してからデータベースクエリを実行できますが、D7では既にオブジェクト上にありましたか?
$account = \Drupal::currentUser()ユーザーオブジェクトをに読み込みますが、ユーザーオブジェクトに$account作成したカスタムフィールドにアクセスするにはどうすればよいですか(管理UIを使用)?
dpm($account)私は私のカスタムフィールドのいずれかを見ることができません。
\Drupal::currentUser()->id()してからデータベースクエリを実行できますが、D7では既にオブジェクト上にありましたか?
回答:
\Drupal::currentUser()Drupal\Core\Session\AccountInterfaceオブジェクトを返します。それは完全なユーザー(それは)かもしれませんが、Drupal\user\UserInterface現時点では、デフォルトの認証方法ではそうではありません。
これを使用して、ユーザーエンティティとすべてのフィールドを取得します。
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())
D7の動作はまったく同じでしたが、D7の違いは、単に異なるstdClassであったことです。2つを区別するための明示的なインターフェイスがあります。
$GLOBALS['user']では完全にロードされたユーザーオブジェクトが含まれていません。usersテーブルにある情報のみが含まれます。
そして、そのオブジェクトからそれを取得する方法は次のとおりです。
// 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;
$user->id()。
Drupal::currentUser()を実装するオブジェクトを返しますDrupal\Core\Session\AccountProxyInterface。それはから返されたものとは異なりUser::load()ますDrupal\user\UserInterface。
これはUser、フィールドがロードされた完全なオブジェクトを取得する保証はないことを意味しますが、Userオブジェクトを取得する保証さえありません。結果としてUser、など、クラスから利用可能なメソッドのいくつかを呼び出しますUser::get()。を呼び出すとAccountInterface::id()、ユーザーIDが返されます。これにより、エンティティにアタッチされたすべてのフィールドモジュールでUserオブジェクト全体をロードし、User::load()アクセスできるようになります。
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\user\Entity\User;
$account = User::load(\Drupal::currentUser()->id());
を使用$accountすると、ユーザーアカウントに関連付けられているすべてのフィールドにアクセスできます。
$account = \Drupal::currentUser(): dpm($account);です。しかし、この回答は、ユーザーエンティティフィールドにアクセスする方法を示しています。質問は、OPがアクセスしようとしているフィールドを示していないため、答えは使用するメソッドを示しているだけです。@batigolixからの回答はありません。