Using a multidimensional array in OptionsResolver

I am using the OptionsResolver component to set my default settings in a class. Since I have a large number of parameters, I created a multidimensional array:

<?php
$resolver = new OptionsResolver();
$resolver->setDefaults([
    'db' => [
        'hostname' => 'localhost',
        'username' => 'root'
    ]
]);
?>

      

Now I want to revoke the username but not the hostname. If i do

$resolver->resolve(['db' => ['username' => 'test']);

      

parameter is hostname

missing.

Can I use a multidimensional array with an OptionsResolver component?

+3


source to share


1 answer


It is currently not supported. However, I've seen this method used, even in Symfony itself, if I remember.



$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']);

      

+6


source







All Articles