BETA

Laravelのバリデーションで'confirmed'を使う時にミスしたこと

投稿日:2020-01-30
最終更新:2020-01-30

Laravelのバリデーションでパスワード確認用にconfirmedを入れていた時に、入力項目は一致しているはずなのに「パスワードが一致しません」と表示されたときのこと。

公式ドキュメントによると、confirmさせたい項目には"xxx_confirmation"を入れろとあったので、

<input type="password" name="password" class="form-control" required placeholder="新しいパスワードを入力">  
<input type="password" name="password_confirmation" class="form-control" required placeholder="確認用にもう一度パスワードを入力">  

こんな感じでformを作成して、Laravel側は

if($request->has('password')){  
    $password = $request->password;  
    $validator = Validator::make($password,[  
        'password' => 'required|string|min:8|confirmed'  
    ],[  
        'required' => ':attributeは必ず指定してください。',  
        'string'  => ':attributeは文字列を指定してください。',  
        'min' => ':attributeは、:min文字以上で指定してください。',  
        'confirmed' => ':attributeと、確認フィールドとが、一致していません。'  
    ]);  

こうしてた。

この書き方だと、パスワード入力が同じでも不一致になった。

ミスしてたところ

Validatorにも、ちゃんとリクエストから受け取ったpassword_confirmationを入れることだった。ということでmakeメソッドの第1引数を$request->all()にした。

if($request->has('password')){  
    $validator = Validator::make($request->all(),[  
        'password' => 'required|string|min:8|confirmed',  
        'password_confirmation' => 'required'  
    ],[  
        'required' => ':attributeは必ず指定してください。',  
        'string'  => ':attributeは文字列を指定してください。',  
        'min' => ':attributeは、:min文字以上で指定してください。',  
        'confirmed' => ':attributeと、確認フィールドとが、一致していません。'  
    ]);  

これで解決しました。

確かにValidatorが見れなきゃチェックできないよね。
公式ドキュメントの「inputに_confirmationが必要」って項目に気を取られすぎて、HTML側で認識されてない書き方しているのか?と思ってHTML側の項目をひたすらいじってたのに直らなくて時間かかった。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

あろはの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう