问题描述
我遵循了一个不错的教程,关于如何创建角色以及如何在Laravel中使用Gates。
我可以为用户添加角色并进行编辑,但是我希望能够创建用户并为他/她分配一个或多个角色,而且我不知道从哪里开始(我不是专业人士,但我需要完成此应用)。
用户控制器:
public function edit(User $user,$id)
{
$user = User::findOrFail($id);
$roles = Role::all();
return view('admin.users.edit',compact('user','roles'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\User $user
* @return \Illuminate\Http\Response
*/
public function update(Request $request,User $user,$id)
{
$user = User::findOrFail($id);
$user->roles()->sync($request->roles);
$user->name = $request->name;
$user->email = $request->email;
$user->save();
return redirect()->route('admin.utilisateurs.index');
}
角色表:
public function up()
{
Schema::create('roles',function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
数据透视表:
public function up()
{
Schema::create('role_user',function (Blueprint $table) {
$table->id();
$table->BigInteger('role_id')->unsigned()->onDelete('cascade');
$table->BigInteger('user_id')->unsigned()->onDelete('cascade');
$table->timestamps();
});
}
使用复选框编辑刀片文件:
<div class="block-content">
<div class="form-group">
@foreach ($roles as $role)
<div class="form-group form-check">
<input type="checkBox" class="form-check-input" name="roles[]"
value="{{ $role->id }}" id="{{ $role->id }}"
@if ($user->roles->pluck('id')->contains($role->id)) checked @endif>
<label class="" for="{{ $role->id }}">{{ $role->name }}</label>
</div>
@endforeach
</div>
</div>
这是控制器上的create方法(不确定它是否正确):
public function store(Request $request,User $user)
{
$user = new User();
$user->roles()->sync($request->roles);
$user->name = $request->name;
$user->email = $request->email;
$user->save();
return redirect()->route('admin.utilisateurs.index')->with('success','Utilisateur ajouté');
}
感谢您阅读这则长消息!
和平
解决方法
在创建刀片时,几乎与编辑刀片相同。您只需要检查现有角色即可。
//rest of the form first like user name and email
<div class="block-content">
<div class="form-group">
@foreach ($roles as $role)
<div class="form-group form-check">
<input type="checkbox" class="form-check-input" name="roles[]" value="{{ $role->id }}" id="{{ $role->id }}">
<label class="" for="{{ $role->id }}">{{ $role->name }}</label>
</div>
@endforeach
</div>
</div>
然后在控制器而不是sync
中使用attach
public function store(Request $request)
{
$user = new User();
$user->name = $request->name;
$user->email = $request->email;
$user->save();
$user->roles()->attach($request->roles);
return redirect()->route('admin.utilisateurs.index')->with('success','Utilisateurajouté');
}
外观我已删除存储功能中的模型绑定。在这里没有必要。和保存用户后的附加角色。 here中
attach
和sync
上的文档。