在OptionsResolver中使用多维数组

Ste*_*ant 3 php arrays multidimensional-array symfony

我正在使用OptionsResolver组件在类中设置我的默认设置.由于我有大量的参数,我创建了一个多维数组:

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

现在我想要否决用户名,而不是主机名.如果我做

$resolver->resolve(['db' => ['username' => 'test']);
Run Code Online (Sandbox Code Playgroud)

hostname参数是消失了.

我可以使用OptionsResolver组件的多维数组吗?

Flo*_*lus 7

它目前不受支持.但是,如果我记得的话,我已经看到了这种方法的使用,即使在Symfony本身也是如此.

$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']);
Run Code Online (Sandbox Code Playgroud)