如何在Laravel中实现Gravatar?
在Laravel中实现Gravatar URL的最快方法是什么?我有一个必填的电子邮件地址字段,但我不想为Gravatars创建新列,我更喜欢使用本机属性。Auth::user()
在Laravel中实现Gravatar URL的最快方法是什么?我有一个必填的电子邮件地址字段,但我不想为Gravatars创建新列,我更喜欢使用本机属性。Auth::user()
事实证明,您可以使用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
您将获得您期望 gravatar.com 网址。无需创建 gravatar 列、变量、方法或其他任何内容。
稍微扩展一下沃根的答案...
使用特质的另一个示例:
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';
}