1

描述

我有一个小的用户/角色管理系统,并希望管理员能够更改用户的密码和名称。到目前为止,它适用于以下代码UsersController

     public function update(request $request, User $user)
  {

    // dd($request);
    //Save roles
    $user->roles()->sync($request->roles);

    //Save user

    $user->name = $request->input("name");
    if ($request->input('password')) {
      $user->password = Hash::make($request->input('password'));
    }
    $user->save();

    return redirect()->route("admin.users.index");
  }

UpdateUser我创建了一个使用此命令调用的表单请求php artisan make:request UpdateUser并将其带入UsersControllerwithuse App\Http\Requests\UpdateUser;并更改public function update(request $request, User $user)...public function update(UpdateUser $request, User $user)...

(我从这个网站得到了这个教程)

UpdateUser看起来像这样,基本功能应该是验证密码输入和密码确认输入是否匹配。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UpdateUser extends FormRequest
{
  /**
   * Determine if the user is authorized to make this request.
   *
   * @return bool
   */
  public function authorize()
  {
    return true;
  }

  /**
   * Get the validation rules that apply to the request.
   *
   * @return array
   */
  public function rules()
  {
    return [
      'name' => ['string', 'max:255', "unique:users"],
      'password' => ["nullable", 'string', 'min:6', 'confirmed'],
      'roles' => ['exists:roles,id'],
    ];
  }
}

问题

没有UpdateUser它就可以工作。我可以更改名称、密码和角色。但UpdateUser我只能更改名称。无法更改角色或密码。当我尝试更改角色和/或密码并提交时,只会重新加载编辑页面。

那么这可能是什么原因呢?

你可以在这里找到我的整个回购

4

3 回答 3

1

改为使用$request->input('password')

我建议->input也对您的所有请求数据使用该方法。

于 2020-04-16T10:20:42.367 回答
1

当您使用自定义请求时,您应该使用$request->password而不是$request['password']. 这是我看到的第一件事。

于 2020-04-16T10:24:28.430 回答
0

在大多数情况下,事实证明这是用户的错误;)

所以发生了什么事?

在编辑刀片中,我从用户那里加载名称,我想编辑。

{{Form::text("name", $user->name,  ["class" => "edit-input", "placeholder" => "Neuer Name..."])}}

当我只更改角色或密码而不更改名称时,UpdateUser声称用户已经存在。这是相应的代码行UpdateUser

public function rules()
  {
    return [
      'name' => ['string', 'max:255', "unique:users"],
      'password' => ["nullable", 'string', 'min:6', 'confirmed'],
      'roles' => ['exists:roles,id'],
    ];
  }
}

unique:users要求导致编辑页面的简单重新加载,因为该名称显然已经存在。我现在明白了,因为我实现了显示错误/成功通知。

在编辑刀片中,我只是替换$user->name"".

于 2020-04-18T11:33:07.993 回答