2017-07-22 156 views
0

我正在使用用戶登錄進行laravel項目。管理員可以創建新用戶並編輯現有用戶。我在更新用戶表單中有passwordpasswordConfirm字段。如果管理員在表單中放入新密碼,它應該檢查驗證並更新數據庫中的記錄。如果沒有,它不應該更改密碼(保留舊密碼),但更新其他用戶數據(如名字)。只有在設置了Laravel的情況下才更新密碼

如果我嘗試使用空的passwordpasswordConfirm字段發送表單,它不驗證。我有一個驗證錯誤,密碼必須是一個字符串並且至少有6個字符長,但我不知道爲什麼。看起來我的更新函數的第一行將被忽略。

UserController.php

public function update(User $user, UserRequest $request) { 

    $data = $request->has('password') ? $request->all() : $request->except(['password', 'passwordConfirm']); 

    $user->update($data); 

    return redirect('/users'); 
} 

UserRequest.php

public function rules() { 
    return [ 
     'firstname' => 'required|string|max:255', 
     'lastname' => 'required|string|max:255', 
     'email' => 'required|string|email|max:255', 
     'password' => 'string|min:6', 
     'passwordConfirm' => 'required_with:password|same:password', 
    ]; 
} 

回答

0

問題就在這裏:

'password' => 'string|min:6', 

在這裏你忘記添加required,這是WH y該錯誤顯示爲下一個驗證,即min:6,而不是string。由於他們沒有數據可用,因此它不檢查的datataype和示值誤差:

password must be a string and at least 6 characters long

與該規則min:6相關。要解決這個問題,請在規則列表中通過'required':

'password' => 'required|string|min:6', 

並重試。

0

如果只想驗證字段存在,則在此類情況下使用sometimes驗證規則。

Add sometimes驗證到password & passwordConfirm。從update()刪除$data行;

// UserController.php 

public function update(User $user, UserRequest $request) { 

    $user->update($request->all()); 

    return redirect('/users'); 
} 

// UserRequest.php 
public function rules() { 
    return [ 
     'firstname' => 'required|string|max:255', 
     'lastname' => 'required|string|max:255', 
     'email' => 'required|string|email|max:255', 
     'password' => 'sometimes|required|string|min:6', 
     'passwordConfirm' => 'sometimes|required_with:password|same:password', 
    ]; 
} 

參考 - https://laravel.com/docs/5.4/validation#conditionally-adding-rules

+0

它does not工作。在發送一個空的「密碼」和一個空的'passwordConfirm'字段之後,我得到了一個錯誤,說明'password'字段是必需的。 – Pengxer

+0

@Pengxer從'password'移除'required'然後檢查。 – Ganesh

0

我總是這樣做在我的項目:

//Your UserController file 
public function update(User $user, UserRequest $request) { 

    $user->update($request->all()); 

    return redirect('/users'); 
} 

//Your UserRequest file 

public function rules() { 
$rules= [ 
    'firstname' => 'required|string|max:255', 
    'lastname' => 'required|string|max:255', 
    'email' => 'required|string|email|max:255' 
]; 

    if($this->method()=="POST"){ 
    $rules['password']='sometimes|required|string|min:6'; 
    $rules['passwordConfirm']='sometimes|required_with:password|same:password'; 
    } 
return $rules; 
} 

所以,你可以看到,如果你的方法是POST這意味着你要添加新用戶,所以它會要求密碼和密碼確認,但如果你的方法是PATCHPUT這意味着你不需要vali日期密碼和密碼確認。

希望它有幫助

相關問題