Laravel 8 Auth场景下用户无头像时如何正确返回默认头像
问题原因
原修改逻辑存在类型错误:未检测到用户上传头像时,$file被赋值为字符串类型的路径值,后续代码仍对该变量调用getUrl()成员方法,字符串不支持该方法调用,因此抛出Call to a member function getUrl() on string报错。
实现方案
调整getPhotoAttribute访问器逻辑,保证无论用户是否上传头像,返回值的属性结构完全一致,原有Auth::user()->photo->thumbnail的调用代码无需任何修改:
public function getPhotoAttribute() { $file = $this->getMedia('photo')->last(); if ($file) { $file->url = $file->getUrl(); $file->thumbnail = $file->getUrl('thumb'); $file->preview = $file->getUrl('preview'); return $file; } // 无头像时返回结构匹配的默认对象 return (object)[ 'url' => asset('default.jpg'), 'thumbnail' => asset('default_thumb.jpg'), // 可根据实际默认缩略图文件路径修改 'preview' => asset('default_preview.jpg'), // 可根据实际默认预览图文件路径修改 ]; }
注意:Laravel的
asset()助手函数默认指向项目public目录,路径参数不需要额外加public/前缀,传入default.jpg即对应public/default.jpg文件。
内容的提问来源于stack exchange,提问作者mitch2k
相关产品推荐
相关产品推荐

