banner-uso-gravatar-laravel

Gravatar (por su abreviación Globally Recognized Avatar) es un servicio para proporcionar un avatar reconocido globalmente asociado con un correo electrónico. Los usuarios que registran su cuenta en gravatar.com establecen una imagen deseada como avatar para un email en específico.  Ésta es una funcionalidad muy usada en comentarios de blogs y foros pero también podemos implementarlo en nuestras aplicaciones de Laravel de una manera sencilla, tan sólo con el email de nuestros usuarios.

Preparación

Vamos a crear una nueva aplicación para hacer las pruebas, ejecutando por consola en el directorio que queramos:

composer create-project laravel/laravel --prefer-dist

y configurando una base de datos para aplicación en el archivo .env

Para así, ejecutar la migración por defecto de la tabla users que trae Laravel, de esta manera:

php artisan migrate

Para probar creamos un usuario con el componente Seeders, modificando el archivo database/DatabaseSeeder.php  así:

public function run()
    {
        DB::table('users')->truncate();
        factory(App\User::class)->create([
            'name'  => 'Clemir',
            'email' => '[email protected]',
            'password' => bcrypt('admin'),
        ]);
    }

Modifica name  y email  con tus datos.

Ejecutamos el seeder y luego verificamos que se crea el usuario en la base de datos:

php artisan db:seed

Por último creamos una ruta para hacer las pruebas, en el archivo routes.php :

Route::get('avatar', function () {
    return view('avatar');
});

En el caso que tengas una aplicación de Laravel ya instalada verifica que las credenciales de la base de datos estén configuradas en el archivo .env, que exista una tabla de usuarios y que uno de sus atributos sea el correo electrónico.

Uso

Podemos implementar gravatar de 2 maneras: una manualmente usando la API de gravatar o por medio del paquete Gravatar que puedes encontrar en packalyst.com.

Para la primera opción es sencillo porque la API no requiere autenticación y son simples consultas de tipo GET, con ellas podemos crear un helper o asociarla con el modelo de usuarios.

Para asociar el gravatar al modelo User podemos modificar el archivo app/user.php colocando el método:

public function getGravatarAttribute()
    {
        $default='http://urlto.example.com/avatar.jpg';
        $size=80;
        $hash = md5(strtolower(trim($this->attributes['email'])));

        return "http://www.gravatar.com/avatar/$hash?d=$default&s=$size";
    }

que nos devolverá el url del avatar de un usuario. Además que la API nos permite enviar parámetros como imagen default, tamaño, etc.

Si quieres hacerlo como helper puedes guiarte con: Cómo crear Helpers personalizados en Laravel

Podemos probarlo vamos a crear una vista para la ruta, en resources/views/avatar.blade.php 

<!DOCTYPE html>
<html>
    <head>
        <title>Gravatar</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
        <style>
           .container {
                text-align: center;
                margin-top: 80px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <img src="{{Auth::loginUsingId(1)->gravatar}}" class="img-circle" />
            <h2>{{Auth::user()->name}}</h2>
        </div>
    </body>
</html>

loginUsingId es un método para autenticar a un usuario por su ID

Quedando como resultado:

vista-gravatar

Por otro lado la otra manera de implementar gravatar es usando el paquete Gravatar de CreativeOrange de la siguiente manera:

Ejecutamos por consola en el directorio raíz de la aplicación:

composer require creativeorange/gravatar ~1.0

o modificamos el composer.json así:

"require": {
   "creativeorange/gravatar": "~1.0"
}

luego ejecutamos composer update  para instalar el paquete.

Incluimos el service provider en config/app.php  en el array de ‘providers’ :

Creativeorange\Gravatar\GravatarServiceProvider::class,

y agregamos el alias en el mismo archivo en el array ‘aliasses’:

'Gravatar' => Creativeorange\Gravatar\Facades\Gravatar::class,

Por último, ejecutamos php artisan vendor:publish  para copiar el archivo de configuración en config/gravatar.php. Con esto, ya lo tenemos instalado para empezar a usarlo.

Ahora podemos usar en los controladores o vistas para obtener la URL del avatar:

Gravatar::get('[email protected]');

También nos da la opción de colocar una imagen por defecto en caso de que el usuario no esté registrado en gravatar

Gravatar::fallback('http://urlto.example.com/avatar.jpg')->get('[email protected]');

Si lo que queremos es comprobar si el usuario tiene una imagen gravatar asociada a su email:

Gravatar::exists('[email protected]');

Además podemos adaptar otras características como el tamaño, la extensión, entre otros y diferentes tamaños en el archivo config/gravatar.php, por ejemplo agregando una nuevo tamaño llamado ‘mediano’:

return array(
	'default' => array(
		'size'   => 80,
		'fallback' => 'mm',
		'secure' => false,
		'maximumRating' => 'g',
		'forceDefault' => false,
		'forceExtension' => 'jpg',
	),
	'mediano' => [
		'size'   => 150,
	]
);

Modificamos la vista creada anteriormente sustituyendo el tag img por:

<img src="{{Gravatar::get(Auth::loginUsingId(1)->email, 'mediano')}}" class="img-circle" />

o simplemente pasar un array con la configuración deseada:

Gravatar::get(Auth::user()->email, ['size' => 150])

y al volver a visitar la ruta:

Material relacionado

¡Bien! espero que les sea de utilidad para sus proyectos de Laravel. No dejes de comentar en caso de duda y compartir en las redes sociales.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Importar datos desde Excel o CSV a Laravel Lección siguiente URLs amigables con Eloquent-Sluggable en Laravel