我必须验证亚马逊MWS ListOrders
电话的配置。
此调用accepts both CreatedAfter
and LastUpdatedAfter
,但只有两个中的一个,而不是两个同时。
那么,如何使用OptionResolver
检查此情况?
我想我可以做something like this:
$resolver = new OptionsResolver();
$resolver->setDefined(['CreatedAfter', 'LastUpdatedAfter']);
$resolver->setAllowedTypes([...]);
但是在这一点上,如何检查只有一个被设置的条件?
我想在$resolver->resolve()
来电期间这样做。
或者我应该首先解析选项,然后检查是否只使用is*()
方法设置了其中一个?
答案 0 :(得分:1)
......只有两个中的一个,而不是两个同时。
要验证在使用它们之前,请使用setNormalizer()
:
$resolver->setDefined(['CreatedAfter', 'LastUpdatedAfter']);
$resolver->setNormalizer('CreatedAfter', function (Options $options, $value) {
if (null === $value xor null === $options['LastUpdatedAfter']) {
return value;
}
throw new \InvalidArgumentException('Both are null or both are provided');
});