Laravel Blade中如何在@guest指令内添加if else语句?
问题原因及解决方法
你遇到的syntax error, unexpected token "<"错误,是因为在Blade的@if指令里错误使用了双大括号{{ }}。Blade控制指令(如@if、@else)内部直接写PHP表达式即可,{{ }}是用来将变量输出到HTML中的语法,混在控制指令里会导致模板解析器无法正确识别代码结构,从而抛出语法错误。
正确代码示例
假设你需要根据用户的tipe字段区分显示不同导航内容,替换原@else的正确写法如下:
@guest <li> <a href="#" class="block py-2 px-3 text-gray-900 rounded md:hover:bg-transparent md:border-0 md:hover:text-blue-700 md:p-0 " aria-current="page">Login</a> </li> <li> <a href="#" class="block py-2 px-3 text-gray-900 rounded md:hover:bg-transparent md:border-0 md:hover:text-blue-700 md:p-0 ">Register</a> </li> @else {{-- 根据用户tipe字段分支显示内容 --}} @if(Auth::user()->tipe == 'admin') {{-- 管理员专属导航 --}} <button id="dropdownAdminBtn" data-dropdown-toggle="dropdownAdmin" class="text-black font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center" type="button">{{ Auth::user()->name }} (管理员) <svg class="w-2.5 h-2.5 ms-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 10 6"> <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/> </svg> </button> <div id="dropdownAdmin" class="z-10 hidden bg-white divide-y divide-gray-100 rounded-lg shadow w-44 dark:bg-gray-700"> <ul class="py-2 text-sm text-gray-700 dark:text-gray-200" aria-labelledby="dropdownAdminBtn"> <li><a href="/admin/dashboard" class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">后台面板</a></li> <li> <a href="#" class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">退出登录</a> <form id="logout-form" action="{{ route('logout') }}" method="POST">@csrf</form> </li> </ul> </div> @elseif(Auth::user()->tipe == 'user') {{-- 普通用户导航 --}} <button id="dropdownDefaultButton" data-dropdown-toggle="dropdown" class="text-black font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center" type="button">{{ Auth::user()->name }} <svg class="w-2.5 h-2.5 ms-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 10 6"> <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/> </svg> </button> <div id="dropdown" class="z-10 hidden bg-white divide-y divide-gray-100 rounded-lg shadow w-44 dark:bg-gray-700"> <ul class="py-2 text-sm text-gray-700 dark:text-gray-200" aria-labelledby="dropdownDefaultButton"> <li><a href="/profile" class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">个人中心</a></li> <li> <a href="#" class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">退出登录</a> <form id="logout-form" action="{{ route('logout') }}" method="POST">@csrf</form> </li> </ul> </div> @endif @endguest
核心注意事项
- Blade控制指令(
@if、@foreach等)内部直接编写PHP表达式,无需用{{ }}包裹。 - 由于
@else已经确保用户处于登录状态,Auth::user()不会为null,但如果tipe字段可能不存在,建议提前做非空判断(如Auth::user()->tipe ?? '')。
内容的提问来源于stack exchange,提问作者yovanherkusuma
相关产品推荐
相关产品推荐

