它是动态构建的,注释不是一种选择。我在数组中有约束。
似乎你需要手动构建验证器,但我很快就遇到需要构建需要加载器的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
];
我还可以构建一个包含两者的数组。
Againt,对象/数组是动态构建的,我无法验证容器本身。它内部的键是自己的定义。
所以我基本上想要的是:
$validator->validate($array, $constraints);
我可以想象你需要一个自定义的MetaDataFactory / Loader / Context类,问题只是回调验证器需要访问 $this->getRoot()
来获取其他值
没关系,你需要像CallbackLoader这样的东西来创建你自己的属性=&gt;约束映射。但是LoaderInterface需要ClassMetaData的具体实现,除非你在ArrayObject上有方法/属性,否则它本身无法处理数组或ArrayObjects。但是 - 因为我的容器是动态构建的,所以我不能拥有它。由于属性/ method_exists调用,方法方法不是一个选项。