在扩展 laravel blade 模板中显示不同的用户图像
Display different User Image in extended laravel blade template
我正在尝试在 Laravel 8 项目的 header 模板中显示用户图片。
基本上,我有不同类型的用户(管理员和讲师),他们有不同的中间件和页面。
我想继承相同的 header 并根据用户类型显示他们的头像。
到目前为止我所做的是:
header.blade.php
@php
$instructor = DB::table('instructors')->where('id', Auth::guard('instructor')->user()->id)->first();
$admin = DB::table('admins')->where('id', Auth::guard('admin')->user()->id)->first();
@endphp
<!-- User Account-->
<li class="dropdown user user-menu">
<a href="#" class="waves-effect waves-light rounded dropdown-toggle p-0" data-toggle="dropdown" title="User">
@if ($admin)
<img src="{{ (!empty($admin->image))? url('upload/admin_images/'.$admin->image) : url('upload/no_image.jpg') }}" alt="">
@elseif ($instructor)
<img src="{{ (!empty($instructor->image))? url('upload/admin_images/'.$instructor->image) : url('upload/no_image.jpg') }}" alt="">
@else
<img src="{{ asset('images/1.jpg') }}" alt="">
@endif
给我的错误是:
Trying to get property 'id' of non-object
此错误仅在我尝试以讲师身份登录时显示。
两种用户类型的中间件、登录控制器基本相同。
仅当我从 header.blade.php 中完全删除 $admin 变量时,Instructor 登录才能正常工作。
我还尝试对 if 和 elseif 条件进行不同的排序,但没有任何改变。
有人知道如何解决吗?
首先,永远不要在你的 Blade 模板中使用 @php
。逻辑绝对不属于你的观点,它们完全是为了展示信息。如果您确实需要访问视图中的变量,请在控制器中分配它并 pass it to the view.
您的错误发生是因为您试图获取有关两个不同守卫的信息,而用户只会拥有一个或另一个。 Blade 提供了检查当前用户的守卫的能力 the @auth
directive.
您可以指定特定的守卫,但这无关紧要,因为您在条件的每个分支中都有相同的代码
<!-- User Account-->
<li class="dropdown user user-menu">
<a href="#" class="waves-effect waves-light rounded dropdown-toggle p-0" data-toggle="dropdown" title="User">
@auth
<img src="{{ url('upload/admin_images/' . Auth::user()->image ?? '../no_image.jpg') }}" alt="">
@endauth
@guest
<img src="{{ asset('images/1.jpg') }}" alt="">
@endguest
</a>
</li>
但是,如果您需要检查特定的守卫,请使用以下语法:
<div>
Welcome, you are authenticated as
@auth('admin')
an administrator
@auth('instructor')
an instructor
@endauth
</div>
我正在尝试在 Laravel 8 项目的 header 模板中显示用户图片。 基本上,我有不同类型的用户(管理员和讲师),他们有不同的中间件和页面。 我想继承相同的 header 并根据用户类型显示他们的头像。 到目前为止我所做的是: header.blade.php
@php
$instructor = DB::table('instructors')->where('id', Auth::guard('instructor')->user()->id)->first();
$admin = DB::table('admins')->where('id', Auth::guard('admin')->user()->id)->first();
@endphp
<!-- User Account-->
<li class="dropdown user user-menu">
<a href="#" class="waves-effect waves-light rounded dropdown-toggle p-0" data-toggle="dropdown" title="User">
@if ($admin)
<img src="{{ (!empty($admin->image))? url('upload/admin_images/'.$admin->image) : url('upload/no_image.jpg') }}" alt="">
@elseif ($instructor)
<img src="{{ (!empty($instructor->image))? url('upload/admin_images/'.$instructor->image) : url('upload/no_image.jpg') }}" alt="">
@else
<img src="{{ asset('images/1.jpg') }}" alt="">
@endif
给我的错误是:
Trying to get property 'id' of non-object
此错误仅在我尝试以讲师身份登录时显示。 两种用户类型的中间件、登录控制器基本相同。 仅当我从 header.blade.php 中完全删除 $admin 变量时,Instructor 登录才能正常工作。 我还尝试对 if 和 elseif 条件进行不同的排序,但没有任何改变。 有人知道如何解决吗?
首先,永远不要在你的 Blade 模板中使用 @php
。逻辑绝对不属于你的观点,它们完全是为了展示信息。如果您确实需要访问视图中的变量,请在控制器中分配它并 pass it to the view.
您的错误发生是因为您试图获取有关两个不同守卫的信息,而用户只会拥有一个或另一个。 Blade 提供了检查当前用户的守卫的能力 the @auth
directive.
您可以指定特定的守卫,但这无关紧要,因为您在条件的每个分支中都有相同的代码
<!-- User Account-->
<li class="dropdown user user-menu">
<a href="#" class="waves-effect waves-light rounded dropdown-toggle p-0" data-toggle="dropdown" title="User">
@auth
<img src="{{ url('upload/admin_images/' . Auth::user()->image ?? '../no_image.jpg') }}" alt="">
@endauth
@guest
<img src="{{ asset('images/1.jpg') }}" alt="">
@endguest
</a>
</li>
但是,如果您需要检查特定的守卫,请使用以下语法:
<div>
Welcome, you are authenticated as
@auth('admin')
an administrator
@auth('instructor')
an instructor
@endauth
</div>