Проверка нескольких массивов в laravel

7

У меня есть 3 типа данных для проверки

  • данные в группе
  • отдельные данные
  • одиночный и данные в объединенной группе

Эта проверка работает для одиночных данных

$validator = Validator::make($request->all(), [
    'tests.*.finding' => 'required',//works for single test
]);

Пример данных выше

["tests"=>
                [
                    0 => ["finding"=>""]
                ],
                [
                    1 => ["finding"=>""]
                ]
            ]

И эта проверка работает для данных в группе

$validator = Validator::make($request->all(), [
    'tests.*.*.finding' => 'required',//works for group
]);

Пример данных выше

  ["tests"=>
                    [
                        "A" =>[
                            [
                                0 => ["finding"=>""]
                            ],
                            [
                                1 => ["finding"=>""]
                            ]
                        ],
                        "B" =>[
                            [
                                0 => ["finding"=>""]
                            ],
                            [
                                1 => ["finding"=>""]
                            ]
                        ]
                    ]
                ]

Как проверить для одиночных и данных в объединенной группе

Пример комбинированных данных

 ["tests"=>
                    [
                        "A" =>[
                            [
                                0 => ["finding"=>""]
                            ],
                            [
                                1 => ["finding"=>""]
                            ]
                        ]
                    ],
                    [
                        0 => ["finding"=>""]
                    ],
                    [
                        1 => ["finding"=>""]
                    ]
                ]

Пожалуйста, помогите мне исправить это, поскольку первый сценарий всегда дает ошибку для второго сценария и наоборот.

  • 0
    Вероятно, не может сделать это с правилами валидации. Вы можете создать собственный валидатор или разделить комбинированные данные на два предыдущих примера, если это проще.
Теги:
laravel-validation
validation
laravel-5

2 ответа

4
Лучший ответ

Это решение, Laravel предоставило sometimes правило управления существованием элемента, а затем только перейти к проверке следующего правила.

Таким образом, окончательное правило проверки.

 $validator = Validator::make($request->all(), [
 'tests.*.*.finding' => 'sometimes|required',//works for group
 'tests.*.finding' => 'sometimes|required',//works for single test
 ]);

Doc для этого: https://laravel.com/docs/5.4/validation#conditionally-adding-rules

  • 1
    Большой! Рад, что вы нашли решение, интересный случай, который вы получили там.
2

Вы можете выполнить код, чтобы исправить данные проверки.

$customFieldValidation = ["test_id" => 'required|numeric',
        "test_two.id" => 'required|numeric',        
        ]);     
  $this->setRules ( $customFieldValidation );  
  $customeAttributes = [
  "test_three.*.id" => 'Test Three ' // custom message
  ];
  $this->setCustomAttributes ($customeAttributes);
  $this->_validate ();

Я надеюсь, что это вам поможет.

  • 0
    Что вы думаете о правилах sometimes ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню