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 iduser 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

如何通过在laravel中填写相同的表格来为多个用户分配任务?

Laravel 5.4:如何遍历请求数组?

表单数据为空 - laravel 5.4

使用迁移 Laravel 5.4 更新列

Laravel 5.4:如何验证图像大小?