web-dev-qa-db-ja.com

ユーザーのプロフィール写真のURLを取得する方法

次のコードを使用してユーザーのプロフィール写真を取得する必要があります。

_\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()'は空にできません。

8
user1960

コードは問題ありませんが、フィールドが空でないかどうかを確認する必要があります。

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では、レンダリングサービスを使用しないでください。新しいテンプレートシステムはこれを自動的に行います。

5
4k4
// 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);
4
$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();
}
1
mradcliffe

これは本当に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

また、ユーザーのデフォルトの画像を取得する方法については、こちらの投稿をご覧ください。このフィールドにデフォルトの画像を設定することができます。

デフォルトのユーザー画像を取得する方法

1
oknate

これはDrupal 8の最良の方法です。コントローラーでカスタムモジュールを作成し、変数をTwigに送信します。

$pictureUri = $user->user_picture->entity->getFileUri();
                         $style = \Drupal::entityTypeManager()->getStorage('image_style')->load('thumbnail');
                         $urlPicture = $style->buildUrl($pictureUri);
0
lucasvm1980