2017-07-22 46 views
0

私はユーザーログインでlaravelプロジェクトに取り組んでいます。管理者は新しいユーザーを作成して既存のユーザーを編集できます。私はpasswordpasswordConfirmフィールドをupdate-user-formに持っています。管理者がフォームに新しいパスワードを入力した場合は、検証を確認してdb内のレコードを更新する必要があります。そうでない場合は、パスワードを変更してはいけません(古いパスワードを保持する)が、他のユーザーデータ(ファーストネームのように)を更新するべきです。Laravelパスワードが設定されている場合にのみ更新パスワード

フィールドが空のpasswordフィールドとpasswordConfirmフィールドを送信しようとすると、検証されません。パスワードが文字列で少なくとも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', 

あなたはそれがWHだ、requiredを追加することを忘れy min:6のエラーが表示され、stringのエラーは表示されません。

password must be a string and at least 6 characters long

ルールmin:6に関連付けられていますので、それはdatataypeをチェックし、エラーが表示されていない使用可能なデータは、彼らではないとして。それを解決するには、次のようなルールリストで「必要」を渡します。

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

もう一度やり直してください。

0

フィールドが存在する場合にのみフィールドを検証する場合は、sometimes検証ルールを使用してください。

sometimesを両方に追加してください。password & passwordConfirm$data行をupdate()から削除します。

// 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

それはうまくいきません。空の 'password'フィールドと空の' 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であれば、あなたが見ることができるように、それはあなたが追加することを意味新しいユーザーはパスワードとパスワードを尋ねるので、あなたの方法がの場合またはPUTの場合は、日付パスワードとパスワードを確認してください。

希望します。

関連する問題