Возникли проблемы с проверкой информации из формы редактирования - PullRequest
0 голосов
/ 14 мая 2018

Когда пользователь входит в представление настроек, оно отображает свою текущую информацию в полях ввода, которые можно редактировать, а затем сохранять. Тем не менее, я сталкиваюсь с небольшим препятствием, которое я не знаю, как избежать. Например:

Пользователь может захотеть изменить только 1 поле, например, например, имя пользователя, однако для этого ему придется изменить свой адрес электронной почты, иначе он получит сообщение о том, что письмо уже получено, и это правда , электронная почта уже занята тем же пользователем. Кроме того, хотя поле пароля не является обязательным, он получит сообщение о том, что пароль должен содержать не менее 5 символов, и если я удалю эту проверку, пользователь сможет добавить пустой пароль.

Я просто хочу сделать так, чтобы я мог редактировать только 1 поле, не меняя остальное.

Вот мой взгляд, который позволяет людям изменять данные своего текущего аккаунта:

<form method="post" action="{{ route('updateProfile', $user) }}" enctype="multipart/form-data">

    <input type="text" name="first_name"  value="{{ $user->first_name }}" />

    <input type="text" name="last_name"  value="{{ $user->last_name }}" />

    <input type="text" name="username"  value="{{ $user->username }}" />

    <input type="email" name="email"  value="{{ $user->email }}" />

    <input type="password" name="password" />

    <input type="password" name="password_confirmation" />

    <input type="file" name="file" />

    {{ csrf_field() }}

    {{ method_field('patch') }}

    <button class='Submit' type="submit" name="submit">Save Changes</button>

</form>

А вот моя функция profileUpdate:

public function updateProfile(Request $request, User $user){

    $this->validate($request, [
        'first_name' => 'max:120',
        'last_name' => 'max:120',
        'username' => 'max:120',
        'email' => 'email|unique:users',
        'password' => 'min:5|max:12|confirmed',
        'file' => 'max:1999'
    ]);

    $file = $request->file('file')->getClientOriginalName();
    $fileName = pathinfo($file, PATHINFO_FILENAME);
    $extension = $request->file('file')->getClientOriginalExtension();
    $fileNameToStore = $fileName.'_'.time().'.'.$extension;
    $fileNameToStore = str_replace(' ', '', $fileNameToStore);
    $path = $request->file('file')->storeAs('public/uploads/profile_pictures/', $fileNameToStore);

    $user->first_name = request('first_name');
    $user->last_name = request('last_name');
    $user->username = request('username');
    $user->email = request('email');
    $user->password = bcrypt(request('password'));
    $user->profile_picture = $fileNameToStore;

    $user->save();

    return back();
}

1 Ответ

0 голосов
/ 14 мая 2018

Если вы посмотрите документацию правила проверки о правиле unique, вы увидите, что вы можете указать дополнительные параметры:

unique:table,column,except,idColumn

С помощью третьего параметра вы можете указать валидатору игнорировать определенную запись в таблице.

Измените ваши правила проверки на следующее:

$this->validate($request, [
    'first_name' => 'max:120',
    'last_name' => 'max:120',
    'username' => 'max:120',
    'email' => 'email|unique:users,email,'.$user->id,
    'password' => 'min:5|max:12|confirmed',
    'file' => 'max:1999'
]);

Это должно решить вашу проблему.

Если по какой-либо причине у вас нет столбца id в качестве первичного ключа, добавьте его в качестве последнего параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...