如何在header.blade.php中获取并展示已认证用户的头像
实现方案
方案1:使用视图合成器(仅给header模板传递数据,无冗余资源消耗)
Laravel 支持指定视图单独传递全局公共数据,不需要每个控制器单独处理:
- 打开
app/Providers/AppServiceProvider.php,修改boot方法:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\Auth; use App\Models\Avatar; // 替换为你自己的Avatar模型实际命名空间 class AppServiceProvider extends ServiceProvider { public function boot() { // 仅给header模板传递头像数据,替换为你自己header模板的实际路径 View::composer('layouts.header', function ($view) { if (Auth::check()) { $view->with('myAvatar', Avatar::find(Auth::user()->avatar_id)); } }); } }
- 直接在
header.blade.php中调用即可,记得加非空判断:
@if(Auth::check() && $myAvatar) <img style="border-radius: 50%;" src="{{url('/')}}/Uploads/avatars/{{$myAvatar->image}}" height="60px" width="60px" alt="用户头像"> @else <!-- 可替换为自己的默认头像路径 --> <img style="border-radius: 50%;" src="{{url('/')}}/Uploads/avatars/default.png" height="60px" width="60px" alt="默认头像"> @endif
方案2:给User模型加关联关系(更简洁优雅的推荐方案)
不需要额外传递任何变量,直接在模板通过模型关联读取:
- 打开
User模型文件,添加头像关联方法:
// App\Models\User.php public function avatar() { return $this->belongsTo(Avatar::class, 'avatar_id'); }
- 直接在
header.blade.php中调用,无需任何额外传参操作:
@auth <img style="border-radius: 50%;" src="{{url('/')}}/Uploads/avatars/{{ optional(Auth::user()->avatar)->image ?? 'default.png' }}" height="60px" width="60px" alt="用户头像"> @endauth
如果使用Laravel 8及以上版本,也可以用空安全运算符简化写法:Auth::user()->avatar?->image
内容的提问来源于stack exchange,提问作者Dr.Noob
相关产品推荐
相关产品推荐

