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
相关产品推荐
相关产品推荐

