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

zpqajqem  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(93)

我必须验证Amazon MWS ListOrders调用的配置。
这个调用accepts both CreatedAfter and LastUpdatedAfter,但只能调用其中一个,不能同时调用两个。
那么,如何用OptionResolver检查这个条件呢?
我想我可以这样做:

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

字符串
但是在这一点上,我如何检查只设置了一个条件?
我想在$resolver->resolve()呼叫期间执行此操作。
还是应该首先解析选项,然后检查是否只有一个选项是使用is*()方法设置的?

toiithl6

toiithl61#

只有一个,而不是两个同时。
当你想在设置任何选项值之前验证它时,可以实现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 options are null or both options are being provided');
});

字符串

相关问题