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

Laravel框架Blade模板if多OR条件判断不生效问题咨询

问题根因

  • 核心问题是逻辑运算符使用错误,你的需求是「当登录用户role_id为1,且角色名称既不是Admin也不是Regional Admin时禁用按钮」,但你现在写的||(或)逻辑存在漏洞:对于role_id=1的用户,该判断会永远返回真——如果角色名是Admin,那!=Regional Admin的条件成立;如果是Regional Admin,!=Admin的条件成立;如果是其他名称两个条件都成立,所以判断永远生效,按钮会一直显示,不会触发禁用逻辑。
  • 其次你的代码只写了满足条件时显示正常按钮的分支,没有补充禁用状态的对应逻辑,哪怕条件判断正确,也不会渲染禁用的按钮。
  • 额外的小问题:如果role_id是数据库存储的int类型,不要加引号和字符串'1'对比,避免隐式类型转换带来的潜在问题。

修复方案

你可以选择更易读的正向判断逻辑:仅当登录用户role_id为1、且角色名是Admin或者Regional Admin时,显示可点击的编辑按钮,其余场景全部显示禁用按钮,代码如下:

@if(Auth::user()->role_id == 1 && in_array($role->name, ['Admin', 'Regional Admin']))
  {{-- 符合权限显示可点击按钮 --}}
  <a class="btn btn-default btn_icon" href="{{ route('roles.edit',$role->id,false) }}">
    <img class="nc-icon" alt="edit" src="{{ asset('admin_icons/edit.svg') }}" data-toggle="tooltip" data-placement="top" title="Éditer" >
  </a>
@else
  {{-- 不符合权限显示禁用按钮,添加对应属性保证可访问性 --}}
  <a class="btn btn-default btn_icon disabled" href="javascript:void(0)" aria-disabled="true">
    <img class="nc-icon" alt="edit" src="{{ asset('admin_icons/edit.svg') }}" data-toggle="tooltip" data-placement="top" title="Éditer" >
  </a>
@endif

如果你要严格匹配你原本的禁用逻辑写法,也可以调整为如下代码:

{{-- 禁用条件:role_id为1且不是Admin且不是Regional Admin --}}
@if(Auth::user()->role_id == 1 && $role->name != 'Admin' && $role->name != 'Regional Admin')
  <a class="btn btn-default btn_icon disabled" href="javascript:void(0)" aria-disabled="true">
    <img class="nc-icon" alt="edit" src="{{ asset('admin_icons/edit.svg') }}" data-toggle="tooltip" data-placement="top" title="Éditer" >
  </a>
@else
  <a class="btn btn-default btn_icon" href="{{ route('roles.edit',$role->id,false) }}">
    <img class="nc-icon" alt="edit" src="{{ asset('admin_icons/edit.svg') }}" data-toggle="tooltip" data-placement="top" title="Éditer" >
  </a>
@endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:00:00