3

它是动态构建的,注释不是一个选项。我在数组中有约束。

似乎您需要手动构建验证器,但我在需要构建需要加载器的 MetaDataFactory 时被卡住了,但所有加载器都有从文件加载元数据的工作。我不认为我'我做得对。

简单地说:

我有一个带有键/值的数组/对象。我希望它们由另一个包含约束的数组验证。

不可能遍历键并在每个键上调用 validate,因为有些依赖于其他键的上下文值。

$array = [
  'key1' => 'abc',
  'key2' => 'def',
];

$constraints = [
  'key1' => new All([
    new Constraint..,
    new CallbackConstraint.., // <- this one checks key2 for its value      
  ]),
  'key2' => new NotBlank
];

我还可以构建一个包含两者的数组。

同样,对象/数组是动态构建的,我无法验证容器本身。它是关于它内部的键,它们本身就是定义。

所以我基本上想要的是:

$validator->validate($array, $constraints); 

我可以想象你需要一个自定义 MetaDataFactory / Loader / Context 类或其他东西,问题只是回调验证器需要访问$this->getRoot()以获取其他值

没关系,您需要像 CallbackLoader 这样的东西,您可以在其中创建自己的属性 => 约束映射。但是 LoaderInterface 需要 ClassMetaData 的具体实现,它自己无法处理数组或 ArrayObject,除非您在该 ArrayObject 上有方法/属性。但是——由于我的容器是动态构建的,我不能拥有它。由于 property/method_exists 调用,方法方法不是一个选项。

4

0 回答 0