3

我正在尝试使用外部 yml 规则集(不在 Symfony 项目中)使用 Symfony2 的验证组件(从 2.1 分支开始)验证导入的 csv 文件中的数据:

use Symfony\Component\Validator\Validation;

$builder = Validation::createValidatorBuilder();
$builder->addYamlMapping('rules.yml');

$validator = $builder->getValidator();

$row = (object)array('name' => 'foo');

$violations = $validator->validate($row);

这是我的 yml 文件:

stdClass:
  properties:
    name:
      - MinLength: 10

现在出现的问题是,Validator 组件似乎无法验证具有动态属性的对象(如stdClass或任何其他具有魔术 getter 和 setter 的类)。

当我运行该代码时,我收到一条消息:

[Symfony\Component\Validator\Exception\ValidatorException]
Property forename does not exist in class stdClass

这是由于突出显示的行中的PropertyMetaclass.php使用property_exists()它检查存在显然不起作用,因为它检查的是类而不是对象。

有谁知道如何让验证器处理具有动态属性的对象?

4

2 回答 2

1

不幸的是,目前无法根据官方声明验证具有动态属性的对象,因此我打开了一个功能请求

我现在的解决方法是编写一个非常简单的代码生成器类,将类定义转储到磁盘上的文件中,然后将其用作数据的类文件。

于 2012-09-03T11:10:29.050 回答
0

object 不是 PHP 类型。

在您的 yaml 文件中使用 stdClass 而不是对象

http://php.net/manual/en/language.types.object.php

于 2012-08-30T15:04:35.820 回答