Как реализовать 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';
}