Как обновить только один вход в форме Laravel? - PullRequest
0 голосов
/ 13 декабря 2018

работа с laravel и mysql.У меня есть форма обновления пользователя с name, email, password и conform password с последующей проверкой контроллера,

$this->validate($request, [
            'name' =>'required',
            'email' => 'required|email',
            'password' => 'sometimes|min:6|confirmed'
  ]);

в моей форме обычно пользователи не обновляют это все поля ввода.Например, некоторые пользователи должны обновлять только электронную почту.но с приведенной выше проверкой, когда мы обновляем только отображение имени или адреса электронной почты The password must be at least 6 characters., тогда как можно выполнить только обновление имени или электронной почты без обновления пароля?

Ответы [ 4 ]

0 голосов
/ 13 декабря 2018

Вы можете указать, password требуется только в том случае, если password_confirmation имеет значение, и наоборот, password_confirmation требуется только в том случае, если password в качестве значения

'name'                  => 'required',
'email'                 => 'required|email',
'password'              => 'required_with:password_confirmation|min:6|confirmed',
'password_confirmation' => 'required_with:password',

. В этом сценарии вы можетеобновить имя, адрес электронной почты И оставить пароль пустым.(Не забудьте проверить, когда вы обновляете пользователя)

В случае, если пользователь заполнил пароль, его необходимо подтвердить с минимум 6 символами

0 голосов
/ 13 декабря 2018

Попробуйте:

$validator = Validator::make($request->all(), [
    'name' => 'required',
    'email' => 'required|email',
]);

$validator->sometimes('password', 'min:6|confirmed', function ($input) {
    return $input->password;
});

if(!$validator->fails()){
    ...
}

Я не уверен насчет return $input->password.Я полагаю, вам следует использовать return !empty($input->password).

Если пароль пуст, тогда не применять правило.

0 голосов
/ 13 декабря 2018

Попробуйте этот код:

$this->validate($request, [
            'name' =>'required',
            'email' => 'required|email',
  ]);

  $name  = $request->name ;
  $email = $request->email;
  $q = User::where('id','=',auth()->user()->id);
  $q->update(['name'=>$name,'email'=>$email]);

  if(isset($request->password)){
       $this->validate($request,[
        'password' => 'required|string|min:6|confirmed',
       ]);
       $password = $request->password);
       $q->update(['password'=>$password );
  }

Также вы можете сделать это, поместив сменный пароль в отдельном виде.

0 голосов
/ 13 декабря 2018

Используйте условие if.Когда пользователь отправляет форму, проверьте, какие поля пусты, а какие нет.Если поле пустое, то пользователь не хочет обновлять эту информацию, и вам не нужно запускать проверку для этого поля. Я не специалист по laravel, поэтому я не могу опубликовать какой-либо демонстрационный код.Но я использовал этот подход в других рамках.

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