Laravel 5.4 如何通过表单请求为用户分配角色?
Posted
技术标签:
【中文标题】Laravel 5.4 如何通过表单请求为用户分配角色?【英文标题】:Laravel 5.4 how to assign roles to user by form request? 【发布时间】:2017-10-20 15:30:37 【问题描述】:我有一个用户列表,在这里我设置了一个选项来为每个用户分配角色,因为当点击“添加角色”链接时,它将显示这条路线
Route::get('admin/home/role/user', 'RoleController@create');
在创建函数中,我的表单代码是...
<form method="post" action=" url('admin/home/role') ">
csrf_field()
<div class="form-group">
<select name="role" class="form-control" >
<option value="1"> Admin </option>
<option value="2"> Editor</option>
</select>
</div>
<button type="submit" class="btn btn-primary">
Add Role
</button>
</form>
要管理此表单,我的 POST 路线是...
Route::post('admin/home/role', 'RoleController@store');
现在如何将这个表单请求数据插入到 role_user 表中?哦!我已经有 3 个表、用户、角色和角色用户。
用户模型关系代码是...
public function role()
return $this->belongsToMany(Role::class, 'role_user');
角色模型关系代码是...
public function user()
return $this->belongsToMany(User::class, 'role_user');
我的问题是如何将表单请求数据插入到 role_user 表中? 我知道一种方法是......
public function store(Request $request, User $user)
$role = Role::find(1);
$user = User::find(19);
$role->user()->attach($user);
它有效,但这不是动态的。如何按表单请求插入?请帮我。我正在搜索这个主题教程但没有找到。
【问题讨论】:
【参考方案1】:你需要发送Role id
和user id
值来存储函数
public function store(Request $request)
$user_id=$request->input('user_id'); // get user id from post request
$role_id=$request->input('role_id'); // get Role id from post request
/* Todo request validation*/
$user = User::find($user_id);
$role = Role::find($role_id);
$user->roles()->attach($role);
查看:
<form method="post" action=" action('RoleController@store') ">
csrf_field()
<input type="hidden" name="user_id" value=" $user->id " /> // you need to pass $user to this view
<div class="form-group">
<select name="role_id" class="form-control" >
<option value="1"> Admin </option>
<option value="2"> Editor</option>
</select>
</div>
<button type="submit" class="btn btn-primary">
Add Role
</button>
</form>
【讨论】:
它说新错误。这是... RoleController.php 第 45 行中的 FatalThrowableError:在 null 上调用成员函数角色() 将用户模型中的公共功能角色()重命名为公共功能角色() 确保这一点:$user->roles()->attach($role); $user->roles()->attach($role);它是 & 用户模型函数是 public function roles() return $this->belongsToMany(Role::class, 'role_user'); 问题在这里... $user_id=$request->input('user') $role_id=$request->input('role');这个输入名称是 user_id & role_id 现在用表单名称 user & role 更改它现在可以工作了。 tnx 贾法尔以上是关于Laravel 5.4 如何通过表单请求为用户分配角色?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.4建站06--API 认证系统 Passport