php - ¿Cómo implemento Gravatar en Laravel?
laravel-4 (2)
Ampliando un poco la respuesta de Wogan ...
Otro ejemplo usando un rasgo:
namespace App/Traits;
trait HasGravatar {
/**
* The attribute name containing the email address.
*
* @var string
*/
public $gravatarEmail = ''email'';
/**
* Get the model''s gravatar
*
* @return string
*/
public function getGravatarAttribute()
{
$hash = md5(strtolower(trim($this->attributes[$this->gravatarEmail])));
return "https://www.gravatar.com/avatar/$hash";
}
}
Ahora, en un modelo dado (es decir, Usuario) en el que desea apoyar a Gravatar, simplemente importe el rasgo y utilícelo:
use App/Traits/HasGravatar;
class User extends Model
{
use HasGravatar;
}
Si el modelo no tiene una columna / atributo de email
, simplemente anule el valor predeterminado configurándolo en el constructor de su modelo de la siguiente manera:
public function __construct() {
// override the HasGravatar Trait''s gravatarEmail property
$this->gravatarEmail = ''email_address'';
}
¿Cuál es la forma más rápida de implementar las URL de Gravatar en Laravel? Tengo un campo de dirección de correo electrónico obligatorio, pero no quiero crear una nueva columna para Gravatars, y prefiero usar los atributos de Auth::user()
nativos.
Resulta que, puede usar un mutador Laravel para crear atributos que no existen en su modelo. Suponiendo que tenga un modelo de User
con una columna de email
obligatoria en la tabla de users
correspondiente, simplemente coloque esto en su modelo de User
:
public function getGravatarAttribute()
{
$hash = md5(strtolower(trim($this->attributes[''email''])));
return "http://www.gravatar.com/avatar/$hash";
}
Ahora cuando haces esto:
Auth::user()->gravatar
Obtendrá la URL gravatar.com que está esperando. Sin crear una columna gravatar, variable, método, o cualquier otra cosa.