You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:37:12