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

Laravel Blade if/else directive切换状态颜色仅显示draft状态问题

问题排查方案

你可以先在这段判断代码前临时加一行调试代码,确认接口实际返回的状态值:

{{-- 调试完成后删除即可 --}}
<div>当前文章实际返回状态:[{{ $post->status }}]</div>

以下是两类最常见的出错原因和对应修复方法:

  • 大小写不匹配:如果数据库存储的状态是大写开头Publish、全大写DECLINE这类格式,和你判断的全小写字符串不一致,就会匹配失败。可以统一转成全小写后再判断,修改逻辑如下:
    @if (strtolower($post->status) == 'draft')
        <span class="px-4 font-bold text-red-400 border-2 border-red-400 rounded-full">
            {{ $post->status }}
        </span>
    @elseif(strtolower($post->status) == 'publish')
        <span class="px-4 font-bold text-green-400 border-2 border-green-400 rounded-full">
            {{ $post->status }}
        </span>
    @elseif(strtolower($post->status) == 'decline')
        <span class="px-4 font-bold text-red-400 border-2 border-red-400 rounded-full">
            Decline
        </span>
    @endif
    
  • 状态值附带多余空格:如果调试打印出来的状态值前后有空白字符,就加trim方法处理后再判断:
    @if (trim(strtolower($post->status)) == 'draft')
    {{-- 其余所有判断语句同步添加trim处理即可 --}}
    
优化方案

你可以用Blade的@switch指令改写逻辑,减少重复代码,后续维护也更方便:

@switch(trim(strtolower($post->status)))
    @case('draft')
        @php $color = 'red-400'; @endphp
        @break
    @case('publish')
        @php $color = 'green-400'; @endphp
        @break
    @case('decline')
        @php $color = 'red-400'; @endphp
        @php $showText = 'Decline'; @endphp
        @break
@endswitch

<span class="px-4 font-bold text-{{ $color }} border-2 border-{{ $color }} rounded-full">
    {{ $showText ?? $post->status }}
</span>

Laravel 8及以上版本也可以直接在Post模型中新增状态样式的访问器,把判断逻辑放到模型层,模板里直接调用对应属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:36:03