我正在尝试使用mutator来存储和检索用户gravatar。
在我的用户模型中,我有:
public function getGravatarAttribute($gravatar){
if($gravatar){
$image = Storage::disk('local')->get('public/avatars/'.$gravatar.'.jpg');
return new Response($image, 200);
}
$hash = md5(strtolower(trim($this->attributes['email'])));
return "http://www.gravatar.com/avatar/$hash?s=256";
}
public function setGravatarAttribute($gravatar){
if(is_object($gravatar) && $gravatar->isValid()){
$image = Image::make($gravatar)->fit(256, 256);
Storage::disk('local')->put('public/avatars/'.$this->id . '.' . $gravatar->getClientOriginalExtension(), $image->response());
$this->attributes['gravatar'] = $this->id;
}
}
在Blade文件中我做了:
<img id="avatar" src="{{ $user->gravatar }}" alt="your image" width="256" height="256"/>
mutator工作得很好:图像存储在storage/app/public/avatars
目录中。问题是访问者:如果我在返回之前使用dd($image);
我可以看到数据但是它没有显示在html页面中
答案 0 :(得分:1)
您尝试像字符串一样回显Response Facade,但是您只需要返回文件的图像路径。
您可以使用Storage Facade上的url功能获取图像路径:
if($gravatar){
$image = Storage::disk('local')->url('public/avatars/'.$gravatar.'.jpg');
return $image;
}
因为您正在使用src的值:
src="{{ $user->gravatar }}"
https://laravel.com/docs/5.4/filesystem#file-urls
<强> 修改 强>
来自文档:
请记住,如果您使用的是本地驱动程序,那么应该是所有文件 可公开访问的应放在storage / app / public中 目录。此外,您应该在。创建一个符号链接 公共/存储指向存储/应用/公共目录。
完成此操作后,您返回的网址应显示您的图片。