#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.

namespace App\Filament\AvatarProviders;

use App\Models\User;
use Filament\AvatarProviders\Contracts\AvatarProvider;
use Illuminate\Database\Eloquent\Model;

class GravatarsProvider implements AvatarProvider
{
    public function get(Model $authUser): string
    {
        /** @var User $user */
        $user = $authUser;

        $hash = md5(strtolower(trim($user->email)));
        return "https://www.gravatar.com/avatar/{$hash}.jpg";
    }
}

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

return [

    /*
    |--------------------------------------------------------------------------
    | Default Avatar Provider
    |--------------------------------------------------------------------------
    |
    | This is the service that will be used to retrieve default avatars if one
    | has not been uploaded.
    |
    */

    'default_avatar_provider' => App\Filament\AvatarProviders\GravatarsProvider::class,

];

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