如何在Laravel中实现Gravatar?

2022-08-30 16:22:45

在Laravel中实现Gravatar URL的最快方法是什么?我有一个必填的电子邮件地址字段,但我不想为Gravatars创建新列,我更喜欢使用本机属性。Auth::user()


答案 1

事实证明,您可以使用Laravel突变体来创建模型中不存在的属性。假设您的模型在相应的表中具有强制列,只需将其粘贴到模型中即可:UseremailusersUser

public function getGravatarAttribute()
{
    $hash = md5(strtolower(trim($this->attributes['email'])));
    return "http://www.gravatar.com/avatar/$hash";
}

现在,当您执行此操作时:

Auth::user()->gravatar

您将获得您期望 gravatar.com 网址。无需创建 gravatar 列、变量、方法或其他任何内容。


答案 2

稍微扩展一下沃根的答案...

使用特质的另一个示例:

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";
    }

}

现在,在您想要支持Gravatar的给定模型(即用户)上,只需导入特征并使用它:

use App\Traits\HasGravatar;

class User extends Model
{
    use HasGravatar;
}

如果模型没有列/属性,只需通过在模型的构造函数中设置它来覆盖默认值,如下所示:email

public function __construct() {
    // override the HasGravatar Trait's gravatarEmail property
    $this->gravatarEmail = 'email_address';
}

推荐