Ошибка проверки в laravel функции обновления - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть панель администратора в моем приложении laravel

С панели администратора администратор может редактировать содержимое профиля пользователя.

Вот мой текущий пользовательский контроллер (включена только функция обновления) )

public function update(Request $request, $id)
{
    $this->validate($request, [
        'name' => ['required', 'alpha','min:2', 'max:255'],
        'last_name' => ['required', 'alpha','min:2', 'max:255'],
        'email' => ['required','email', 'max:255', 'unique:users,email,'.$id],
        'password' => ['same:confirm-password','regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{12,}$/'],
        'mobile'=>['required', 'regex:/^\+[0-9]?()[0-9](\s|\S)(\d[0-9]{9})$/','numeric','min:9'],
        'username'=>['required', 'string', 'min:4', 'max:10', 'unique:users,username,'.$id],   
        'roles'=>['required'],
        //'user_roles'=>['required'],
    ]);

    $input = $request->all();
    if(!empty($input['password'])){ 
        $input['password'] = Hash::make($input['password']);
    }else{
        $input = array_except($input,array('password'));    
    }

    $user = User::find($id);
    $user->update($input);
    DB::table('model_has_roles')->where('model_id',$id)->delete();

    $user->assignRole($request->input('roles'));

    if($input['roles']=='customer'){
        return redirect()->route('customers.index')
                    ->with('success','Customer has been updated successfully');
    }
    else{
        return redirect()->route('users.index')
                    ->with('success','User has been updated successfully');
    }
}

Теперь моя проблема в том, что

Когда администратор обновляет пользователя без изменения полей пароля, поля пароля проверяются и выдают мне ошибку регулярного выражения, связанную с паролем. .

Как я могу избежать этой проблемы и проверить поле пароля, только если они меняются.

1 Ответ

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

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

...