78064


Laravel8で配列の添え字(キー)が0からの連番かどうかをバリデーションしたいのですが、どうやったらよろしいでしょうか。

[code]

    <input name="fruits[0]" >
    <input name="fruits[1]" >
    <input name="fruits[2]" >
    …
    
[/code]

独自のルール(カスタムバリデーション)を作るという手もありますが、簡単に行う方法があれば知りたいです。  
配列や配列の中身のバリデーションは既にできています。

ちなみにこの質問に至った経緯ですが、バリデーション後の配列の添え字は信用できるのかなと思ったわけです。

[code]

    $validated = $request->validated()
    // $key は信用できる？
    foreach ($validated["fruits"] as $key => $fruit) {
    
[/code]

(この例の場合信用できないなら自分で0から始まるカウンタを作ればいいだけですが)

追記  
確認しましたが送信された配列のキーそのままなので改竄される可能性があり、使わないかバリデーションするかになると思います。


CC BY-SA 4.0
2021-07-07T11:44:10.950
78025
2021-07-09T09:08:20.000
2021-07-09T09:08:20.000
34267
34267
question
laravel
Laravelのバリデーションで配列の添え字が0からの連番かどうか


デフォルトでそういったバリデーションは用意されていないのでカスタムバリデーションを書くことになります

FormRequestを使った場合ですが、controllerで書く場合も参考になると思います

<https://laravel.com/docs/8.x/validation#using-closures>

[code]

    public function rules()
        {
            return [
                'fruits.*' => 'required|integer|min:0',
                'fruits' => [
                    'required',
                    'min:0',
                    'array',
                    function($attribute, $value, $fail) {
                        $count = count($value);
                        for ($i = 0; $i < $count; $i++) {
                            if (array_key_exists($i, $value) === false) {
                                $fail("error index {$i} on {$attribute}");
                            }
                        }
                    }
                ],
            ];
        }
    
[/code]


CC BY-SA 4.0
2021-07-09T03:46:04.210
78064
2021-07-09T03:46:04.210
298
78025
answer