【问题标题】:How to validate array items in Symfony 2.3?如何在 Symfony 2.3 中验证数组项?
【发布时间】:2014-09-08 13:28:31
【问题描述】:

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

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

所以MyEntity 必须在entityCollection 字段中包含AnotherEntitys 的数组。

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

例如,这两个var_dumps 都在屏幕上显示值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 文件中的条目以便验证按预期进行?

提前谢谢你。

【问题讨论】:

  • 您能否详细说明“认为有效”的含义?你是说你的表单对象的isValid()方法返回true
  • @HaigBedrosian 我编辑了我的问题以使其更清楚:)。

标签: php validation symfony symfony-2.3


【解决方案1】:

您的配置看起来不错,尽管我更习惯于将它们用作注释,因此很清楚它们适用于哪些实体属性。你试过了吗:

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

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

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

Symfony Validator API v2.3

【讨论】:

  • 嗯,没想到。我会尝试并告诉你,谢谢:)。
  • 我将其更改为 $symfonyValidator->validate($obj, array('mygroup'), true);$symfonyValidator->validate($obj, array('mygroup'), true, true);。它不起作用,它一直说一切都是有效的。这是一个非常奇怪的问题......
  • 那么只有两个约束——验证组和实体类型。那么……消除验证组有什么效果吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
相关资源
最近更新 更多