Laravel通知Blade模板else语句失效问题求助
问题分析与解决方案
你的代码逻辑存在两个核心问题:
- 当
$notifications集合为空时,@foreach循环根本不会执行,内部所有判断和输出都不会触发,导致页面空白。 - 当前的
else分支是针对单个通知不符合musicOwner条件的情况,而非整个通知集合为空的场景,逻辑完全错位。
修正方案
使用Blade提供的@forelse指令(专门处理循环集合为空的场景),同时调整逻辑:
<body> <main> @include('siteLayout.sidebar') <div class="wrapper"> @include('siteLayout.header') <div class="main-container"> <div class="main-header">Notifications</div> <div class="main-contents"> <ul class="notification-lists"> @forelse ($notifications as $notification) {{-- 显示当前用户作为musicOwner的通知 --}} @if ($notification->musicOwner == Auth::user()->id) <li class="notification unread"> <span class="notification-icon"></span> <div>You have notifications</div> </li> @endif @empty {{-- 通知集合为空时显示提示 --}} <li class="notification"> <div>未找到通知</div> </li> @endforelse </ul> </div> </div> </div> </main> </body>
额外优化建议
提前在控制器中过滤通知,直接查询出属于当前用户的通知,避免在模板中做条件判断,代码更简洁高效:
// 控制器代码示例 $notifications = Notification::where('musicOwner', Auth::id())->get();
对应模板可简化为:
@forelse ($notifications as $notification) <li class="notification unread"> <span class="notification-icon"></span> <div>You have notifications</div> </li> @empty <li class="notification"> <div>未找到通知</div> </li> @endforelse
内容的提问来源于stack exchange,提问作者Tizi prince
相关产品推荐
相关产品推荐

