Включение пользовательского запроса формы в 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']
. Это первое, что я увидел.