如何仅更新Laravel形式的一个输入?

时间:2018-12-13 06:43:56

标签: php laravel laravel-5

使用laravel和mysql。我有nameemailpasswordconform password的用户更新表格,其中包含以下控制器验证信息,

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

通常,用户不会更新所有输入字段。例如,某些用户只需要更新电子邮件。但是通过以上验证,当我们仅更新名称或电子邮件验证显示消息The password must be at least 6 characters.时,如何仅更新名称或电子邮件而不更新密码?

4 个答案:

答案 0 :(得分:1)

尝试以下代码:

$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 );
  }

您也可以通过将更改密码以单独的形式放置来实现。

答案 1 :(得分:0)

使用if条件。用户提交表单时,请检查哪些字段为空,哪些字段不为空。如果该字段为空,则用户不想更新该信息,并且您不需要运行该字段的验证。我不是laravel专家,所以我无法发布任何演示代码。但是我在其他框架中使用了这种方法。

答案 2 :(得分:0)

尝试一下:

$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)

如果密码为空,则不要应用该规则。

答案 3 :(得分:0)

您可以指定,仅当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个字符来确认