Reputation: 10144
I am using the OptionsResolver component to set my default settings in a class. Since I'm having a large amount of parameters, I've created a multidimensional array:
<?php
$resolver = new OptionsResolver();
$resolver->setDefaults([
'db' => [
'hostname' => 'localhost',
'username' => 'root'
]
]);
?>
Now I want to overrule the username, but not the hostname. If I do
$resolver->resolve(['db' => ['username' => 'test']);
the hostname
param is gone.
Can I a multidimensional array with the OptionsResolver component?
Upvotes: 3
Views: 1879
Reputation: 6946
It is currently not supported. However I have seen this method being used, even within Symfony itself if I recall.
$resolver = new OptionsResolver();
$resolver
->setRequired(array(
'db'
))
->setAllowedTypes(array(
'db' => 'array'
))
;
$dbResolver = new OptionsResolver();
$dbResolver
->setDefaults(array(
'hostname',
'username'
))
->setAllowedTypes(array(
'hostname' => 'string',
'username' => 'string'
))
;
$options = $resolver->resolve($options);
$options['db'] = $dbResolver->resolve($options['db']);
Upvotes: 7