#development #laravel #php

Out of the box, Filament uses ui-avatars.com to generate avatars based on a user's name. To provide your own avatar URLs, you can implement the HasAvatar contract.

So, if you want to support gravatar.com, you can start with creating a custom AvatarProvider.

 1namespace App\Filament\AvatarProviders;
 2
 3use App\Models\User;
 4use Filament\AvatarProviders\Contracts\AvatarProvider;
 5use Illuminate\Database\Eloquent\Model;
 6
 7class GravatarsProvider implements AvatarProvider
 8{
 9    public function get(Model $authUser): string
10    {
11        /** @var User $user */
12        $user = $authUser;
13
14        $hash = md5(strtolower(trim($user->email)));
15        return "https://www.gravatar.com/avatar/{$hash}.jpg";
16    }
17}

Once you have this, it is as simple as registering it in config/filament.php under the key default_avatar_provider:

 1return [
 2
 3    /*
 4    |--------------------------------------------------------------------------
 5    | Default Avatar Provider
 6    |--------------------------------------------------------------------------
 7    |
 8    | This is the service that will be used to retrieve default avatars if one
 9    | has not been uploaded.
10    |
11    */
12
13    'default_avatar_provider' => App\Filament\AvatarProviders\GravatarsProvider::class,
14
15];

Important to know is that if null is returned from the getFilamentAvatarUrl() method, Filament will fall back to ui-avatars.com.