Laravel中使用@forelse与@if分支出现unexpected 'endif'错误如何解决
错误原因排查
- 核心语法错误:你嵌套使用的
@forelse缺少必填的@empty分支。Laravel Blade 规定@forelse语法必须包含「循环执行块」+「空数据执行块(@empty)」+ 闭合标签@endforelse三部分,省略@empty会导致Blade编译模板时语法解析混乱,误判后续的@endif为多余标签,触发你遇到的报错。 - 附加逻辑隐患:
- 当
$surveillances中没有匹配$kader->username == $surveillance->nik_ortu的记录、或者匹配记录的status既不是1也不是0时,表格会缺失对应列,导致HTML结构错乱。 - 外层
@forelse的@empty块中直接放置div标签在<tbody>内属于非法HTML结构,浏览器渲染会异常。
- 当
修复方案
如果你不需要处理内层循环的空数据展示场景,直接把内层的@forelse换成@foreach即可解决语法错误,同时补充逻辑兜底保证表格结构完整,修复后代码如下:
<tbody> @forelse ($kaders as $kader) <tr> <td>{{ $kader->username }}</td> @if($kader->status_user == '1') <td>Admin</td> @elseif($kader->status_user == '0') <td>Ibu / Guest</td> @else <td>未知身份</td> @endif @php $hasMatched = false; @endphp @foreach ($surveillances as $surveillance) @if($kader->username == $surveillance->nik_ortu) @php $hasMatched = true; @endphp @if($surveillance->status == '1') <td>Aktif</td> @elseif($surveillance->status == '0') <td>NonAktif</td> @else <td>状态未知</td> @endif @endif @endforeach @if(!$hasMatched) <td>无监测数据</td> @endif <td class="text-center"> <form onsubmit="return confirm('Apakah Anda Yakin ?');" action="{{ route('kader.destroy', $kader->id) }}" method="POST"> <a href="{{ route('kader.edit', $kader->id) }}" class="btn btn-sm btn-primary"><i class="far fa-edit"></i> EDIT</a> @csrf @method('DELETE') <button type="submit" class="btn btn-sm btn-danger"><i class="far fa-trash-alt"></i> HAPUS</button> </form> </td> </tr> @empty <tr> <td colspan="4" class="text-center"> <div class="alert alert-danger"> Data Kader belum Tersedia. </div> </td> </tr> @endforelse </tbody>
如果你坚持要使用@forelse,只需要在内层@forelse的@endforelse前补充@empty分支即可,示例:
@forelse ($surveillances as $surveillance) <!-- 原有循环逻辑 --> @empty <td>无监测数据</td> @endforelse
内容的提问来源于stack exchange,提问作者Dhargombeths
相关产品推荐
相关产品推荐

