无法在Laravel中更新用户信息

时间:2018-09-10 23:57:46

标签: laravel crud

在我当前的项目(学校管理系统)上,我希望管理员可以注册用户。管理员可以创建课程和主题,例如,我可以使用资源控制器来完成这些课程。但是,我认为我可以为用户做同样的事情,因为这个过程对我来说似乎是一样的。即:我可以显示,编辑,创建,更新和删除用户。

但是,到目前为止,我遇到了几个问题。现在,我可以创建用户,但不能更新它们。

这是我的代码:

web.php

Route::middleware(['auth', 'admin'])->group(function () {

  Route::get('/admin', 'HomeController@admin');

  Route::post('register', 'UserController@store');

  Route::resources([
      'admin/cursos' => 'CursoController',
      'admin/turmas' => 'TurmaController',
      'admin/semestres' => 'SemestreController',
      'admin/materias' => 'MateriaController',
      'admin/usuarios' => 'UserController',
  ]);

});

UserController.php

public function update(Request $request, $id)
{
  $rules = array(
    'name'      => 'required|string|max:255',
    'email'     => 'required|string|email|max:255|unique:users',
    'role'      => 'required|string',
    'password'  => 'required|string|min:6|confirmed',
  );

  $validator = validator::make(Input::all(), $rules);

  if ($validator->fails()) {
    // return dd();
    return Redirect::to('/admin/usuarios/' . $id . '/edit')
    ->withErrors($validator);
  } else {
    // store
    $user = User::find($id);
    $user->name       = Input::get('name');
    $user->email      = Input::get('email');
    $user->role       = Input::get('role');
    $user->password   = Input::get('password');
    $user->save();

    // redirect
    Session::flash('message', 'Sucesso!');
    return Redirect::to('/admin/usuarios');
  }

}

每次我尝试更新用户信息时,验证都会失败。这到底是怎么回事?我是Laravel的新手,所以现在有点迷路了。

1 个答案:

答案 0 :(得分:1)

如果用户在不更改电子邮件地址的情况下尝试更新其信息时请求失败,则需要其他逻辑来忽略与电子邮件关联的用户的ID。

  

有时,您可能希望在唯一检查期间忽略给定的ID。例如,考虑一个包含用户名,电子邮件地址和位置的“更新配置文件”屏幕。当然,您将需要验证电子邮件地址是否唯一。但是,如果用户仅更改名称字段而不是电子邮件字段,则您不希望引发验证错误,因为该用户已经是电子邮件地址的所有者。

     

要指示验证者忽略用户的ID,我们将使用Rule类来流畅地定义规则。在此示例中,我们还将验证规则指定为数组,而不是使用|分隔规则的字符:

Validator::make($data, [
    'email' => [
        'required',
        Rule::unique('users')->ignore($user->id),
    ],
]);

应用于您的一组验证规则,它看起来像:

$rules = array(
    'name'      => 'required|string|max:255',
    'email'     => [
        'required', 
        'string', 
        'email, 
        'max:255', 
        Rule::unique('users')->ignore(auth()->id())
     ],
    'role'      => 'required|string',
    'password'  => 'required|string|min:6|confirmed',
);