Laravel 8中使用邮箱哈希显示用户头像的解决方案(替代原Laravel 5 getHash()方法)
在Laravel 8中通过邮箱哈希显示用户头像的解决方案
嘿,我之前升级Laravel版本的时候也碰到过这个问题,毕竟版本迭代后有些老的自定义方法或者依赖逻辑需要调整,咱们一步步来搞定它:
方法一:手动实现邮箱哈希逻辑(最直接)
如果你的Laravel 5项目里的getHash()是自定义的模型方法,那在Laravel 8里只需要把这个方法迁移到新的User模型里就行——注意Laravel 8的模型默认放在app/Models/目录下,不是原来的app/啦。
在app/Models/User.php里添加这个方法:
public function getHash() { // Gravatar要求邮箱转小写并去除前后空格后再哈希 return md5(strtolower(trim($this->email))); }
然后在视图里就可以像之前一样调用,比如用Gravatar的头像链接:
<img src="https://www.gravatar.com/avatar/{{ $user->getHash() }}" alt="{{ $user->name }} 的头像">
要是想给没有Gravatar头像的用户设置默认头像,只需要在链接后面加参数就行:
<!-- 用mp作为默认卡通头像,还可以选identicon、monsterid等 --> <img src="https://www.gravatar.com/avatar/{{ $user->getHash() }}?d=mp" alt="{{ $user->name }} 的头像">
方法二:用第三方包简化操作(更优雅)
如果之前是用第三方包实现的,Laravel 8里推荐用creativeorange/gravatar这个包,配置起来很省心:
- 先安装包:
composer require creativeorange/gravatar
- 在User模型里添加一个访问器,方便直接获取头像链接:
use Creativeorange\Gravatar\Facades\Gravatar; // 定义头像访问器 public function getAvatarAttribute() { // 直接生成带默认头像的链接 return Gravatar::get($this->email, ['d' => 'mp']); }
- 之后在视图里就可以直接用这个属性:
<img src="{{ $user->avatar }}" alt="{{ $user->name }} 的头像">
小提醒
不管用哪种方法,都要确保用户的邮箱字段是正确的,毕竟哈希是基于邮箱生成的。另外,如果你是自己存储头像的逻辑,那只需要把哈希后的字符串和你的存储路径拼接就行,原理是一样的~
内容的提问来源于stack exchange,提问作者Isha
相关产品推荐
相关产品推荐

