Qual è il modo più veloce per implementare gli URL Gravatar in Laravel? Ho un campo di posta elettronica obbligatorio, ma non voglio creare una nuova colonna per Gravatars, e preferirei usare gli attributi nativi Auth::user()
.Come implementare Gravatar in Laravel?
risposta
Risulta, è possibile utilizzare un mutatore Laravel per creare attributi che non esistono nel modello. Supponendo di avere un modello User
con una colonna di email
obbligatorio nella corrispondente users
tavolo, basta attaccare questo nel modello User
:
public function getGravatarAttribute()
{
$hash = md5(strtolower(trim($this->attributes['email'])));
return "http://www.gravatar.com/avatar/$hash";
}
Ora, quando si esegue questa operazione:
Auth::user()->gravatar
otterrai i gravatar.com URL che ti aspetti. Senza creare una colonna gravatar, una variabile, un metodo o qualsiasi altra cosa.
Ampliando la risposta di Wogan un po '...
Un altro esempio utilizzando un Trait:
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";
}
}
Ora su un dato modello (ad esempio Utente) in cui si desidera supportare Gravatar, è sufficiente importare il tratto e usarlo:
use App\Traits\HasGravatar;
class User extends Model
{
use HasGravatar;
}
Se il modello non dispone di un email
colonna/attributo, semplicemente ignorare l'impostazione predefinita impostando nel costruttore del modello come così:
public function __construct() {
// override the HasGravatar Trait's gravatarEmail property
$this->gravatarEmail = 'email_address';
}
Eccellente! Sì, sicuramente consiglierei un approccio basato sui Tratti ora, dopo aver lavorato con Laravel per due anni. Grazie per aver condiviso @anderly! – Wogan
wow, questo è ottimo – jhamPac