Как валидировать внутренний массив в Symfony 4, который содержит объекты?

Всем привет! Такое тело запроса
{
	"cf_sub_products": [
		{
			"size": "s",
			"cf_product_id": 1,
			"enabled": false,
			"price":  123,
			"sku":  "123"
		},
		{
			"size": "l",
			"cf_product_id": 1,
			"enabled": true,
			"price":  123,
			"sku":  "asd"
		}
	]
}


пока валидация только такая
$constraint = new Assert\Collection(
            [
                'fields' => [
                    'cf_sub_products' => [
                        new Assert\NotBlank(),
                        new Assert\Type('array')
                    ]
                ]
            ]
        );
        $violations = $validator->validate($body, $constraint);


Но необходимо как-то проверить ключи в этих объектах, заранее спасибо!
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Если я правильно вас понял:
$constraint = new Assert\Collection(
    [
        'fields' => [
            'cf_sub_products' => [
                new Assert\NotBlank(),
                new Assert\Type('array'),
                new Assert\All([
                    new Assert\Collection([
                        'fields' => [
                            "size" => [
                                new Assert\NotBlank(),
                            ],
                            "cf_product_id" => [
                                new Assert\NotBlank(),
                            ],
                            "enabled" => [
                                new Assert\NotBlank(),
                            ],
                            "price" => [
                                new Assert\NotBlank(),
                            ],
                            "sku" => [
                                new Assert\NotBlank(),
                            ],
                        ],
                    ])
                ])
            ]
        ]
    ]
);
$violations = $validator->validate($body, $constraint);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы