kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

laravelのvalidateサンプル part2

kazu22002.hatenablog.com

日付

        $request->validate([
            'date' => 'date',
        ]);
OK : 2010-01-02
OK : 2010/01/02
OK : 2010-01-02 10:05:03
NG : 2010-01-32

開始日,終了日

日付の整合性チェック。終了日は入力しないでもOK

        $request->validate([
            'start_date' => 'date',
            'end_date' => 'nullable|after_or_equal:start_date',
        ]);
OK: start_date: 2010-01-02, end_date: 2010-01-02
OK: start_date: 2010-01-02, end_date: 2010-01-03
OK: start_date: 2010-01-02, end_date: 
NG: start_date: 2010-01-02, end_date: 2010-01-01

電話番号(入力がわかれている場合)

        $request->validate([
            'tel01' => 'required_with:tel02,tel03|numeric',
            'tel02' => 'required_with:tel01,tel03|numeric',
            'tel03' => 'required_with:tel01,tel02|numeric',
        ]);
OK: tel01: 123, tel02: 456, tel03: 789
NG: tel01: abc, tel02: 456, tel03: 789
NG: tel01: 123, tel02:, tel03: 789
NG: tel01: 123, tel02: 456, tel03:

どちらかの項目に入力があること

        $request->validate([
            'email' => 'required_without:tel',
            'tel' => 'required_without:email',
        ]);
OK: email: sample@example.com, tel: 
OK: email: , tel: 123456789
NG: email: , tel: 

複数合わせた項目

functionを利用して独自のvalidateを作成

        $telValidate = function($attribute, $value, $fail) use ($values){
            if(empty($values->tel01) ||
                empty($values->tel02) ||
                empty($values->tel03)
            ){
                $fail('電話番号は必須です。');
            }
        };
        $request->validate([       // <-- ここがバリデーション部分
            'tel01' => ['required', 'numeric', $telValidate],
            'tel02' => ['required', 'numeric'],
            'tel03' => ['required', 'numeric'],
        ])

まとめ

次のバリデートはパスワードまわりとDB関係の記事が書きたいです。