次のコードを使用してユーザーのプロフィール写真を取得する必要があります。
_\Drupal::service('renderer')->renderPlain(\Drupal\user\Entity\User::load(\Drupal::currentUser()->id())->user_picture->first()->view('large'))
_
画像タグ付きのオブジェクトを返しますが、ユーザーにプロフィール写真が設定されていない場合、_Call to a member function view() on a non-object_
エラーで失敗します。
answer to " How do I get the default user picture? "も試しましたが、エラーが発生します
Drupal\Core\Database\InvalidQueryException:クエリ条件 'file_managed.uuid IN()'は空にできません。
コードは問題ありませんが、フィールドが空でないかどうかを確認する必要があります。
if ($user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())) {
if (!$user->user_picture->isEmpty()) {
$picture = $user->user_picture->view('large')
}
else {
$picture = // get default picture
}
}
Drupal 8では、レンダリングサービスを使用しないでください。新しいテンプレートシステムはこれを自動的に行います。
// Getting the actual user uid.
$uid = \Drupal::service('current_user')->id();
// Getting the actual user entity.
$user = \Drupal::service('entity.manager')->getStorage('user')->load($uid);
// Getting the user picture.
$user_picture = $user->user_picture->entity->getFileUri();
// To use dpm you need the devel module.
dpm($user_picture);
$account = \Drupal::currentUser()->getAccount();
if (!$account->user_picture->isEmpty()) {
$image_url = $account
->user_picture
->first()
// Fetch the file entity associated with the image item entity reference.
->get('entity')
// Use the url() to call file_create_url() as in Drupal 7 to get the URL.
->url();
}
これは本当にPHP=の問題です。特にdrupalエンティティ。設定されている場合と設定されていない場合があります。
$uid = \Drupal::currentUser()->id();
// Might be zero if user is logged out.
if ($uid) {
$user = \Drupal\user\Entity\User::load($uid);
// check that the field exists and that it has a value.
if (!empty($user->user_picture) && $user->user_picture->isEmpty() === FALSE) {
$image = $user->user_picture->first();
$rendered = \Drupal::service('renderer')->renderPlain($image);
}
}
また、Drupalコーディング標準では、行を80文字以下に抑えることをお勧めします。コードを読みやすくするため、これは良い方法だと思います。以下を参照してください。
https://www.drupal.org/node/935284
また、ユーザーのデフォルトの画像を取得する方法については、こちらの投稿をご覧ください。このフィールドにデフォルトの画像を設定することができます。
これはDrupal 8の最良の方法です。コントローラーでカスタムモジュールを作成し、変数をTwigに送信します。
$pictureUri = $user->user_picture->entity->getFileUri();
$style = \Drupal::entityTypeManager()->getStorage('image_style')->load('thumbnail');
$urlPicture = $style->buildUrl($pictureUri);