Symfony OptionResolver:如何检查两个选项中只有一个设置

时间:2017-12-13 12:03:36

标签: symfony options-resolver

我必须验证亚马逊MWS ListOrders电话的配置。

此调用accepts both CreatedAfter and LastUpdatedAfter,但只有两个中的一个,而不是两个同时。

那么,如何使用OptionResolver检查此情况?

我想我可以做something like this

$resolver = new OptionsResolver();
$resolver->setDefined(['CreatedAfter', 'LastUpdatedAfter']);
$resolver->setAllowedTypes([...]);

但是在这一点上,如何检查只有一个被设置的条件?

我想在$resolver->resolve()来电期间这样做。

或者我应该首先解析选项,然后检查是否只使用is*()方法设置了其中一个?

1 个答案:

答案 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');
});