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

