如何在Symfony 2.3中验证数组项?

时间:2014-09-08 13:28:31

标签: php validation symfony symfony-2.3

我使用Symfony v2.3.x并且我有一个看起来像这样的验证文件:

Namespace\To\MyEntity:
    properties:
        entityCollection:
            - Type: { groups: [mygroup], type: array }
            - All:
                constraints:
                    - Type: { groups: [mygroup], type: Namespace\To\AnotherEntity }

因此MyEntity必须在AnotherEntity字段中包含entityCollection个数组。

它成功验证entityCollection必须是数组。但是,它无法验证该数组的元素是否为指定类型。

例如,这两个var_dump都会在屏幕上显示值0,即使我预计会出现非零值:

$obj = new MyEntity();
$obj->entityCollection = array(12345);
$errors = $symfonyValidator->validate($obj, array('mygroup'));
var_dump(count($errors));

$obj = new MyEntity();
$obj->entityCollection = array("something");
$errors = $symfonyValidator->validate($obj, array('mygroup'));
var_dump(count($errors));

我甚至尝试从验证文件中删除constraints条目;它没有任何区别。

我看了Symfony's official page about the All keyword,但找不到任何有用的东西。

我应该如何修改validation.yml文件中的条目,以便验证按预期工作?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

你的配置看起来很好,虽然我更习惯于将它们作为注释,因此它很清楚它们适用于哪些实体属性。你试过了吗?

$errors = $symfonyValidator->validate($obj, array('mygroup'), true);

validate()方法的第3个参数是遍历您正在验证的对象的布尔值。

bool    $traverse   Whether to traverse the value if it is traversable.

Symfony Validator API v2.3