Использование компонента проверки Symfony для проверки объектов с динамическими свойствами


Я пытаюсь проверить данные в импортированном csv-файле с помощью компонента проверки Symfony2 (начиная с ветки 2.1), используя внешний набор правил yml (не в проекте Symfony):

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 или любой другой класс с магическими геттерами и сеттерами).

Когда я запускаю этот код, я получаю сообщение говоря:

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

Это связано с PropertyMetaclass.php в выделенной строке, где существование проверяется с помощью property_exists(), что, очевидно, не работает, поскольку оно проверяет класс, а не объект.

Кто-нибудь знает, как я могу заставить валидатор работать с объектами, имеющими динамические свойства?

Author: Elnur Abdurrakhimov, 2012-08-30

2 answers

К сожалению, в настоящее время невозможно проверить объекты с динамическими свойствами в соответствии с этим официальным заявлением , поэтому я открыл запрос функции .

Теперь мой обходной путь состоял в том, чтобы написать очень простой класс генератора кода, который сбрасывает определения классов в файл на диске, который затем используется в качестве файла класса для данных.

 1
Author: acme, 2012-09-03 11:10:29

Объект не относится к типу PHP.

Используйте класс STD в вашем файле yaml вместо объекта

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

 0
Author: Nuno Costa, 2012-08-30 15:04:35