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.phpproperty_exists()が原因であり、オブジェクトではなくクラスに対してチェックしているため、これは明らかに機能しません。

Validator を動的プロパティを持つオブジェクトと連携させる方法を知っている人はいますか?

4

2 に答える 2

1

残念ながら、この公式声明によると、現在、動的プロパティを持つオブジェクトを検証することはできないため、機能リクエストを開きました。

私の回避策は、クラス定義をディスク上のファイルにダンプする非常に単純なコードジェネレータークラスを作成することでした。これは、データのクラスファイルとして使用されます。

于 2012-09-03T11:10:29.050 に答える
0

object は PHP 型ではありません。

object の代わりに yaml ファイルで stdClass を使用します

http://php.net/manual/en/language.types.object.phpを参照してください

于 2012-08-30T15:04:35.820 に答える