Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use multidimensional array in OptionsResolver

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?

like image 511
Stephan Vierkant Avatar asked Jul 27 '26 19:07

Stephan Vierkant


1 Answers

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']);
like image 187
Flosculus Avatar answered Jul 30 '26 10:07

Flosculus



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!