如何使用用于规则的symfony验证器XML符号来描述嵌套数据集合的约束?

我试着使用allcollection限制,并以某种方式将它们组合在一起,但我无法让报价得到验证.我如何验证第二个或更深的数据?

测试代码:

<?php

require 'vendor/autoload.php';

use Symfony\Component\Validator\Validation;

$validatorBuilder = Validation::createValidatorBuilder();
$validator = $validatorBuilder->enableAnnotationMapping()
    ->addXmlMapping('validation.xml')
    ->getValidator();

$transfer = new \Generated\Shared\Transfer\ProductConcreteTransfer();
$transfer->fromArray([
    'numberOfOffers' => 0,
    'defaultPrice' => null,
    'offers' => [
        [
            'idProductOffer' => 1,
            'merchantName' => null,
        ],
        [
            'idProductOffer' => 1,
            'merchantName' => null,
        ]
    ]
]);

$result = $validator->validate($transfer);

if ($result->count() > 0) {
    echo "Validation failed. Found " . $result->count() . " violation(s):\n";

    foreach ($result as $violation) {
        echo sprintf(
            "Property: %s | Constraint: %s | Message: %s\n",
            $violation->getPropertyPath(),
            get_class($violation->getConstraint()),
            $violation->getMessage()
        );
    }
} else {
    echo "Validation passed. No violations found.\n";
}

validation.xml文件:

<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping https://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">

    <class name="Generated\Shared\Transfer\ProductConcreteTransfer">
        <property name="abstractSku">
            <constraint name="Symfony\Component\Validator\Constraints\NotBlank"/>
        </property>
        <property name="defaultPrice">
            <constraint name="Symfony\Component\Validator\Constraints\NotBlank"/>
        </property>
        <property name="numberOfOffers">
            <constraint name="Symfony\Component\Validator\Constraints\NotBlank"/>
            <constraint name="Symfony\Component\Validator\Constraints\Length">
                <option name="min">1</option>
                <option name="max">50</option>
            </constraint>
        </property>
        <property name="offers">
            <!-- How do I validate each entity in the collection? -->
        </property>
    </class>
</constraint-mapping>

推荐答案

我相信Valid的限制应该会对你有所帮助.

此约束用于对作为被验证对象的属性嵌入的对象启用验证.这允许您验证对象及其关联的所有子对象.

Php相关问答推荐

谷歌云SQL / mysql谁是对的?

无法添加ProxyClass__setInitialized()上的忽略

FatFreeFramework上的不同路由

如何优化-PHP 7.3.14+Laravel 6

PHP中冒号的奇怪用例

将部分产品排除在WooCommerce的计算附加费之外

为什么本地主机(Xampp)上的laravel运行速度比普通html站点慢?

Symfony 6.2 IsGraned具有多个角色

如何不重新查询模型A-&>;相关模型B-&>模型

PHP -将字符串拆分为两个相等的部分,但第二个字符串中的单词更多

使用DOMPDF获取PDF格式的本 map 像

如何在laravel中获得两个时间戳之间的小时和分钟差异

woocommerce_available_ payment_gateways 过滤器挂钩多次触发

如何更新 Laravel Eloquent 列强制转换为集合

PHP 简单 XML Xpath 上移树(带有名称的父级)

Shopware 6 AuthControllerDecorator已弃用

在WooCommerce中显示 checkout 的高级自定义字段(Advanced Custom Fields)并保存其值

正则表达式请帮我从内容中找到这个词

如何使用动态变量定义 bind_result?

laravel 中的 OrderBy json 列