【问题标题】:detect changes on laravel input prefilled values检测 laravel 输入预填充值的变化
【发布时间】:2018-07-25 18:17:59
【问题描述】:

如果用户在输入字段中看到他预填的用户名和电子邮件,我正在处理设置页面。 如果用户更改了输入上的预填充值,我喜欢检测(没有 jQuery ????)。

对于密码重置字段(未预填充),我使用以下逻辑:

if($request['password'] != ""){
    if(!(Hash::check($request['password'], Auth::user()->password))){
      return redirect()->back()->with('error', 'Your password does not match with the password you provided.');
    }

    if(strcmp($request['password'], $request['new_password']) == 0){
      return redirect()->back()->with('error', 'New password cannot be same as your old one.');
    }

    $validation = $request->validate([
      'password' => 'required',
      'new_password' => 'required|string|min:6|confirmed',
    ]);

    $user->password = bcrypt($request['new_password']);
    $user->save();

    return redirect()->back()->with('alert-success', 'Password changed 
     successfully');
}

我如何检查用户是否更改了预填充代码以使用以下程序:

if($request[''] ????? ""){
    $user = Auth::user();
    $user->name = $request['name'];
    $user->email = $request['email'];
    $user->save();
}

谢谢

【问题讨论】:

    标签: php validation laravel-5


    【解决方案1】:

    在我看来,你不需要这一切。只需使用以下内容。如果值发生变化,它只会真正更新模型。如果值没有改变(即提交的数据与已经存储在数据库中的数据相同),则不会进行数据库查询。

    $user = Auth::user();
    $user->fill($request->only(['name', 'email']));
    $user->save();
    

    【讨论】:

      【解决方案2】:

      经过长时间的搜索,我找到了isDirty() 来检查数据库信息是否已更改,但我需要在发送前检查预填充的输入是否已更改,因此我添加了第二个操作按钮,现在使用 switch 语句进行更可控的行为,就像这样:

      public function profilePost(UserUpdate $request)
      {
      
        switch($request->input('action')){
          case 'save_user':
            $user = Auth::user();
            $user->name = $request['name'];
            $user->email = $request['email'];
            $user->save();
      
            return redirect()->back()->with('alert-success', 'Your profile information changed successfully');
      
            break;
      
          case 'save_password':
            if($request['password'] != ""){
              if(!(Hash::check($request['password'], Auth::user()->password))){
                return redirect()->back()->with('error', 'Your current password does not match with the password you provided.');
              }
      
              if(strcmp($request['password'], $request['new_password']) == 0){
                return redirect()->back()->with('error', 'New password cannot be same as your current one.');
              }
      
              $validation = $request->validate([
                  'password' => 'required',
                  'new_password' => 'required|string|min:6|confirmed'
              ]);
      
              $user = Auth::user();
              $user->password = bcrypt($request['new_password']);
              $user->save();
      
              return redirect()->back()->with('alert-success', 'Password changed 
               successfully');
            } else {
              return redirect()->back()->with('error', 'No Password was changed');
            }
            break;
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-06-13
        • 1970-01-01
        • 2020-05-06
        • 2015-11-29
        • 2018-12-06
        • 2019-03-13
        • 1970-01-01
        • 2023-04-02
        • 2015-03-30
        相关资源
        最近更新 更多