2016-08-20 47 views
0

我正在用盡想法。我有一個控制器方法更新我的數據庫中的用戶記錄。Laravel 5 - 更新用戶刪除db中的密碼字段

有一種形式,當前用戶可以在其中輸入他的名字,姓氏,用戶名,電子郵件和密碼。除密碼以外的所有字段都預先填入了存儲的值。

當用戶離開密碼字段爲空時,當前密碼將被覆蓋。當然,我嘗試了empty()isset()

這裏是我的控制器方法:

public function update($user_id, Request $request){ 
    if(Auth::user()->canUpdateUser($user_id)){ 
     $user = User::find($user_id); 

     $inputs = $request->all(); 

     foreach($inputs as $key => $value){ 
      if($key === 'password' && !empty($inputs[$key])) { 
       $validator = Validator::make($inputs, [ 
        'password' => 'confirmed|required' 
       ]); 
       if ($validator->fails()) { 
        return back()->withErrors($validator)->withInput(); 
       } else { 
        $user->$key = bcrypt($value); 
       } 
      } elseif($key === 'password_confirmation' || $key === '_token'){ 
       // Nothing 
      } elseif($key === 'username') { 
       $validator = Validator::make($request->all(), [ 
        'username' => 'unique:users,username,' . $user->id 
       ]); 
       if($validator->fails()){ 
        return back()->withErrors($validator)->withInput(); 
       } else { 
        $user->$key = $value; 
       } 
      } elseif($key === 'email'){ 
       $validator = Validator::make($request->all(), [ 
        'email' => 'unique:users,email,' . $user->id 
       ]); 
       if($validator->fails()){ 
        return back()->withErrors($validator)->withInput(); 
       } else { 
        $user->$key = $value; 
       } 
      } else { 
       echo $key, "<br>"; 
       $user->$key = $value; 
      } 
     } 

     $user->save(); 
     //return back()->with('success', 'Deine Daten wurden geändert'); 
    } else { 
     abort(401); 
    } 
} 

回答

0

爲什麼通過每個變量循環?即使你有兩個錯誤的字段,你的方式一次只會返回一個錯誤。只需驗證並更新用戶(正常情況下無需密碼字段),然後對密碼部分進行有條件檢查:

public function update($user_id, Request $request){ 
    if(Auth::user()->canUpdateUser($user_id)){ 
     $user = User::find($user_id); 

     $fields = $request->except('password'); 
      $validator = Validator::make($fields, [ 
       'email' => 'unique:users,email,' . $user->id, 
       'username' => 'unique:users,username,' . $user->id 
      ]); 
      if($validator->fails()){ 
       return back()->withErrors($validator)->withInput(); 
      } else { 
       $user->update($fields); 
      } 
     } 

     $pw = $request->get('password', ''); 

     if(str_len($pw) && $pw == $request->get('password_confirmation')){ 
      $user->pw = bcrypt($pw); 
     } 

     $user->save(); 

     return back()->with('success', 'Deine Daten wurden geändert'); 
    } else { 
     abort(401); 
    } 
+0

嘿,謝謝!我不知道'$ request-> except()' - function :) – Brotzka