Включение пользовательского запроса формы в Laravel препятствует правильной работе контроллера

Описание

У меня есть небольшая система управления пользователями / ролями, и я хочу, чтобы администратор мог изменять пароли и имена пользователей. Пока он работает с этим кодом в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 и внесла его в UsersController с use 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я могу только изменить имя. Невозможно изменить роль или пароль. Когда я пытаюсь изменить роль и / или пароль и отправить, это только перезагружает страницу редактирования.

Так в чем может быть причина?

Вы можете найти все мое репо здесь

3 ответа

Решение

Как и в большинстве случаев оказывается, что это была ошибка пользователя;)

Итак, что случилось?

В колонке редактирования я загружаю имя пользователя, которого хочу отредактировать.

{{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 с "".

Использовать $request->input('password') вместо.

Я бы рекомендовал использовать ->input для всех данных вашего запроса.

Поскольку вы используете индивидуальный запрос, вы должны использовать $request->password вместо того $request['password']. Это первое, что я увидел.

Другие вопросы по тегам