我对捆绑包有以下配置:
$supportedAdapters = array('curl', 'socket');
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('example_bundle');
$rootNode
->children()
->scalarNode('username')->isRequired()->cannotBeEmpty()->end()
->scalarNode('password')->isRequired()->cannotBeEmpty()->end()
->scalarNode('adapter')
->validate()
->ifNotInArray($supportedAdapters)
->thenInvalid('The adapter %s is not supported. Please choose one of '.json_encode($supportedAdapters))
->end()
->cannotBeOverwritten()
->isRequired()
->cannotBeEmpty()
->end()
// allow the use of a proxy for cURL requests
->arrayNode('proxy')
->children()
->scalarNode('host')->isRequired()->cannotBeEmpty()->end()
->scalarNode('port')->isRequired()->cannotBeEmpty()->end()
->scalarNode('username')->defaultValue(null)->end()
->scalarNode('password')->defaultValue(null)->end()
->end()
->end();
return $treeBuilder;
我们支持两个适配器:curl
和socket
。
我们仅支持使用curl
请求的代理。在配置中,我想检查是否设置了代理并且适配器不是curl,然后抛出一个错误,通知用户“我们只支持卷曲适配器用于代理”。有没有办法获得一个设定值(在我们的情况下适配器)并检查它的值并对其进行验证?
伪代码:
IF PROXY IS SET AND ADAPTER IS NOT EQUAL TO CURL THEN:
THROW ERROR ("We don't support the use of a proxy with the socket adapter");
END IF;
我希望这是有道理的。我已经阅读了所有文档和API文档,但是,唉,我看不到实现此目的的选项。
答案 0 :(得分:2)
解决了这个问题:
$supportedAdapters = array('curl', 'socket');
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('example_bundle');
$rootNode
->validate()
->ifTrue(function($v){ return isset($v['proxy']) && 'curl' !== $v['adapter'];})
->thenInvalid('Proxy support is only available to the curl adapter.')
->end()
->children()
->scalarNode('username')->isRequired()->cannotBeEmpty()->end()
->scalarNode('password')->isRequired()->cannotBeEmpty()->end()
->scalarNode('adapter')
->validate()
->ifNotInArray($supportedAdapters)
->thenInvalid('The adapter %s is not supported. Please choose one of '.json_encode($supportedAdapters))
->end()
->cannotBeOverwritten()
->isRequired()
->cannotBeEmpty()
->end()
// allow the use of a proxy for cURL requests
->arrayNode('proxy')
->children()
->scalarNode('host')->isRequired()->cannotBeEmpty()->end()
->scalarNode('port')->isRequired()->cannotBeEmpty()->end()
->scalarNode('username')->defaultValue(null)->end()
->scalarNode('password')->defaultValue(null)->end()
->end()
->end();
return $treeBuilder;
: - )