Jaki jest najszybszy sposób wdrożenia adresów URL Gravatar w Laravel? Mam obowiązkowe pole adresu e-mail, ale nie chcę tworzyć nowej kolumny dla Gravatars i wolałbym używać natywnych atrybutów Auth::user()
.Jak mogę wdrożyć Gravatar w Laravel?
Odpowiedz
Okazało się, możesz użyć mutatora Laravel do stworzenia atrybutów, które nie istnieją w twoim modelu. Zakładając, że masz User
model z obowiązkowego email
kolumnie odpowiadającej users
tabeli, po prostu trzymać to w modelu User
:
public function getGravatarAttribute()
{
$hash = md5(strtolower(trim($this->attributes['email'])));
return "http://www.gravatar.com/avatar/$hash";
}
Teraz, kiedy to zrobić:
Auth::user()->gravatar
Dostaniesz adres URL gravatar.com, którego oczekujesz. Bez tworzenia kolumny, zmiennej, metody grawitacji lub czegokolwiek innego.
Rozwijając na odpowiedź Wogan trochę ...
Innym przykładem stosując cecha:
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";
}
}
Teraz w danym modelu (czyli użytkownika), w którym chcesz obsługiwać Gravatar, wystarczy zaimportować cechę i używać go:
use App\Traits\HasGravatar;
class User extends Model
{
use HasGravatar;
}
Jeśli model nie ma email
kolumny/atrybut, po prostu zastąpić ustawienia domyślne, ustawiając go w konstruktorze modelu podobnego więc:
public function __construct() {
// override the HasGravatar Trait's gravatarEmail property
$this->gravatarEmail = 'email_address';
}
Świetne! Tak, zdecydowanie polecam podejście oparte na Trait teraz, po pracy z Laravel przez dwa lata. Dziękujemy za udostępnienie @anderly! – Wogan
wow, to świetnie – jhamPac