How do I implement Gravatar in Laravel?

只谈情不闲聊 提交于 2019-12-31 19:49:13

问题


What's the fastest way to implement Gravatar URLs in Laravel? I have a mandatory email address field, but I don't want to create a new column for Gravatars, and I'd prefer to use the native Auth::user() attributes.


回答1:


Turns out, you can use a Laravel mutator to create attributes that don't exist in your model. Assuming you have a User model with a mandatory email column in the corresponding users table, just stick this in your User model:

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

Now when you do this:

Auth::user()->gravatar

You'll get the gravatar.com URL you're expecting. Without creating a gravatar column, variable, method, or anything else.




回答2:


Expanding on Wogan's answer a bit...

Another example using a 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";
    }

}

Now on a given model (i.e. User) where you want to support Gravatar, simply import the trait and use it:

use App\Traits\HasGravatar;

class User extends Model
{
    use HasGravatar;
}

If the model doesn't have an email column/attribute, simply override the default by setting it in the constructor of your model like so:

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


来源:https://stackoverflow.com/questions/23724887/how-do-i-implement-gravatar-in-laravel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!