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

Laravel Blade组件内用@if动态设class报语法错误,求原因

问题原因及解决方案

核心原因

Blade组件的属性声明中不允许直接嵌套@if/@endif指令。Blade解析器在处理组件标签时,会将整个属性部分作为一个整体解析,内部的@endif会被错误识别为标签外的语法,从而触发"unexpected token 'endif'"错误。你写的@if逻辑虽然语法上闭合,但不符合Blade组件属性的解析规则。

解决方案

这里提供几种可行的解决方式:

  • 使用三元表达式(最直接)
    把@if逻辑转换成三元运算符,直接在属性中赋值:

    <x-ui.general.dashboard_link 
        href="/dashboard/calendar" 
        class="{{ 'hello' == 'hello' ? 'text-sm' : '' }}"
    >
        CALENDAR
    </x-ui.general.dashboard_link>
    

    如果需要默认类名,可以合并进去:

    class="default-class {{ 'hello' == 'hello' ? 'text-sm' : '' }}"
    
  • 在组件内部处理类名(更优雅)
    修改dashboard_link组件的逻辑,让它接收一个active(或自定义)参数,在组件内部动态拼接类名:
    组件文件(比如resources/views/components/ui/general/dashboard_link.blade.php):

    <a 
        href="{{ $href }}" 
        class="base-class {{ $active ? 'text-sm' : '' }}"
    >
        {{ $slot }}
    </a>
    

    调用时:

    <x-ui.general.dashboard_link 
        href="/dashboard/calendar" 
        :active="('hello' == 'hello')"
    >
        CALENDAR
    </x-ui.general.dashboard_link>
    

    注:参数前加:表示传递布尔/变量值,而非字符串。

  • 使用Laravel 9+的条件属性语法
    Laravel 9及以上版本支持简化的条件属性写法,直接在属性前加@来控制是否渲染:

    <x-ui.general.dashboard_link 
        href="/dashboard/calendar" 
        @class(['text-sm' => 'hello' == 'hello'])
    >
        CALENDAR
    </x-ui.general.dashboard_link>
    

    这种方式还可以轻松合并多个条件类:

    @class([
        'default-class',
        'text-sm' => 'hello' == 'hello',
        'font-bold' => request()->is('dashboard/calendar')
    ])
    

内容的提问来源于stack exchange,提问作者DeveloperLewis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:22:16