我有三个用户角色:学生、教师、管理员。
如果一个用户是一个学生,我想显示的选项,以提升他们无论是教师或管理员在下拉菜单和相同的其他角色,例如。教师获得管理员和学生选项。
当前是这样的:
指数
@if ($user->role == 'admin')
<form action="/admin/users/{{ $user->id }}" method="POST">
@csrf
@method('PATCH')
<input class="hidden" name="role" value="user">
<button>Make User</button>
</form>
@else
<form action="/admin/users/{{ $user->id }}" method="POST">
@csrf
@method('PATCH')
<input class="hidden" name="role"value="teacher">
<button>Make Teacher</button>
</form>
@endif
控制器
public function update(User $user)
{
$attributes = request()->validate([
'role' => ['required', Rule::exists('users', 'role')]
]);
$user->update($attributes);
return back()->with('success', 'User Updated!');
}
我怎么能做一个if语句列出所有的角色,除了当前的角色分配给用户,或者这是更好的在控制器中完成,而不是?
是否有可能把角色放在一个段塞,然后运行foreach,所以我不重复代码?
我是新的顶级Laravel,所以任何帮助都会很感激:)由于
- 为您的页面提供所有角色
- 如果用户
hasRole()
方法不存在,添加到该方法。 - 使用FormRequest进行验证
- 不要忘记获取
$user
的角色,以避免User::with('roles')->find($id)
的n+1查询。
@foreach($allRoles as $role)
@if(! $user->hasRole($role))
Your form
@endif
@endforeach