$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라는 점입니다. 이제 두 가지를 구별 할 수있는 명시적인 인터페이스가 있습니다.
$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의 답변이 없습니다.