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

Описание

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

<?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 ]

1 голос
/ 16 апреля 2020

Вместо этого используйте $request->input('password').

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

0 голосов
/ 18 апреля 2020

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

Так что же случилось?

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

{{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 на "".

0 голосов
/ 16 апреля 2020

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

...