Как реализовать Gravatar в Laravel?
Какой самый быстрый способ реализовать URL-адреса Gravatar в Laravel? У меня есть обязательное поле адреса электронной почты, но я не хочу создавать новый столбец для Gravatars, и я бы предпочел использовать собственные атрибуты Auth::user()
.
Ответы
Ответ 1
Оказывается, вы можете использовать мутатор Laravel для создания атрибутов, которые не существуют в вашей модели. Предполагая, что у вас есть модель User
с обязательным столбцом email
в соответствующей таблице users
, просто вставьте это в свою модель User
:
public function getGravatarAttribute()
{
$hash = md5(strtolower(trim($this->attributes['email'])));
return "http://www.gravatar.com/avatar/$hash";
}
Теперь, когда вы это сделаете:
Auth::user()->gravatar
Вы получите URL-адрес gravatar.com, который вы ожидаете. Без создания столбца gravatar, переменной, метода или всего остального.
Ответ 2
Расширение на Wogan немного ответит...
Еще один пример использования Trait:
namespace App\Traits;
trait HasGravatar {
/**
* The attribute name containing the email address.
*
* @var string
*/
public $gravatarEmail = 'email';
/**
* Get the model gravatar
*
* @return string
*/
public function getGravatarAttribute()
{
$hash = md5(strtolower(trim($this->attributes[$this->gravatarEmail])));
return "https://www.gravatar.com/avatar/$hash";
}
}
Теперь на данной модели (например, User), где вы хотите поддержать Gravatar, просто импортируйте признак и используйте его:
use App\Traits\HasGravatar;
class User extends Model
{
use HasGravatar;
}
Если модель не имеет атрибута email
column/attribute, просто переопределите значение по умолчанию, установив его в конструкторе вашей модели следующим образом:
public function __construct() {
// override the HasGravatar Trait gravatarEmail property
$this->gravatarEmail = 'email_address';
}