我正在使用 Laratrust 和 laravel 根据角色显示数据库中的记录。每条记录都有一个角色类型字段(下表示例)。
在我的刀片视图中,我想将它们显示为代码(变量称为
$types
)。
<select name="type" id="" class="form-control">
@foreach ($types as $type)
@role($type->role)
<option value="{{ $type->id }}">
{{ $type->name }} {{ $type->role }}
</option>
@endrole
@endforeach
</select>
什么也没显示。我的数据是正确的。我尝试手动编写角色类型,并且成功了。如果我将
@role()
留空,则会显示错误,因此这不是变量传递之前解释的角色的问题。任何帮助将不胜感激。
问题可能是因为 Laratrust 的
@role
指令需要字符串文字作为其参数,并且它可能无法正确解释变量 $type->role
。
此问题的解决方法是使用 Laratrust 提供的
hasRole
方法。此方法可以在经过身份验证的用户实例上使用,它接受角色名称作为字符串,该字符串可以是变量。
<select name="type" id="" class="form-control">
@foreach ($types as $type)
@if(auth()->user()->hasRole($type->role))
<option value="{{ $type->id }}">
{{ $type->name }} {{ $type->role }}
</option>
@endif
@endforeach
</select>
在此代码中,
auth()->user()->hasRole($type->role)
检查经过身份验证的用户是否具有$type->role
中指定的角色。如果用户具有该角色,则会显示该选项。