描述
我是 PHP/Laravel 新手,我设置了一些用户/角色管理。我只需要一个注册和登录功能。 “注册”功能仅供管理员使用。 我使用了标准身份验证设置,正如 Laravel docs 中所述。
目前每个新用户都会获得“学生”角色,正如您在这段代码中看到的:
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'password' => Hash::make($data['password']),
]);
// every new user gets the role "student"
$role = Role::select("id")->where("role", "student")->first();
$user->roles()->attach($role);
return $user;
}
这就是创建用户表单的相应刀片:
<h2>Benutzer Erstellen</h2>
<form method="POST" action="{{ route('register') }}" class="form-container">
@csrf
<h3>Neuen Benutzer anlegen</h3>
{{-- <h4>Benutzerrechte:</h4>
<div class="row-container">
<div class="row-grid">
<label for="name">{{ __('Login Name:') }}</label>
<input id="name" type="text" class="edit-input @error('name') is-invalid @enderror" name="name"
value="{{ old('name') }}" required autocomplete="name" autofocus placeholder="Name">
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="row-grid">
<label for="password">{{ __('Passwort:') }}</label>
<input id="password" type="password" class="edit-input @error('password') is-invalid @enderror" name="password"
required autocomplete="new-password" placeholder="Passwort">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="row-grid">
<label for="password-confirm">{{ __('Passwort wiederholen:') }}</label>
<input id="password-confirm" type="password" class="edit-input" name="password_confirmation" required
autocomplete="new-password" placeholder="Passwort wiederholen">
</div>
<div class="form-bottom"><a class="abort-btn" href="{{route("admin.users.index")}}">Abbrechen</a>
<button class="action-btn" type="submit">Nutzer anlegen</button>
</div>
</form>
目标
我想实现具有可能角色的动态创建的复选框,以便管理员可以通过创建用户来分配角色。 我试过这样:
<div class="row-container">
@foreach ($roles as $role)
<input type="checkbox" name="roles[]" value="{{ $role->id}}">
{{Form::label("body", $role->role)}}
@endforeach
</div>
问题
那么如何才能默认选中其中一个复选框呢?
RegisterController 中的代码应该是什么样子,用于从复选框获取值并将角色与用户连接起来?
编辑
第二个问题的答案:
在RegisterController中替换:
$role = Role::select("id")->where("role", "student")->first();
$user->roles()->attach($role);
与:
$user->roles()->attach($data['roles']);
在这篇 Laravel 新闻文章中找到它。
您可以在此处找到整个存储库。
提前感谢您的宝贵时间:)
有一个更简单的方法。
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
])->assignRole('RoleYouWant');
只需勾选您要使用的角色即可。