在OptionsResolver中使用多维数组

3

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

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

现在我想覆盖用户名,但不想覆盖主机名。 如果我这样做

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

hostname参数已经被删除。

我能用OptionsResolver组件创建一个多维数组吗?


1
请查看此处的内置提案:https://github.com/symfony/symfony/pull/27291 - yceruto
1个回答

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

请查看此处的内置提案 https://github.com/symfony/symfony/pull/27291 - yceruto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接