ぬぬん!

やってみたこと,思ったこと

【Laravel】カスタムバリデーションを作って配列に対してバリデーションする

完全に自分メモのn番煎じです

きっとインターネットのどこかに1番煎じの美味しい知識が落ちているだろう

この間、カスタムバリデーションで悩んでいたら助けてもらったので
忘れないようにメモします

カスタムバリデーションを作る

qiita.com

神Qiitaでした
一旦ここ通りにやればカスタムバリデーションはできる

配列に対してバリデーションをする

配列の要素の合計値が10なるようにバリデーションするルールを作る

CustomValidatorは

class CustomValidator extends \Illuminate\Validation\Validator
{
    public function validateIsSumTen($attribute, $array_value, $parameters)
    {
        $sum = collect($array_value)->sum();

        return $sum === 10;
    }

で、詰まっていたのがこれ Requestクラスのココ

    public function rules()
    {
        return [
            'hoges' => 'array|is_sum_ten'
        ];
    }

本来配列の値全部に対してバリデーションをかけるときは
hoge.*と記述するところを
配列の要素をまたいでバリデーションをするときは
hogeとする(実装していてココにハマった)

そうするとpublic function validateIsSumTen($attribute, $array_value, $parameters)$arrayValueに配列ごと渡されるので
あとは配列をくるくるしてバリデーションチェックすればいい