【问题标题】:Symfony Configuration Default ValuesSymfony 配置默认值
【发布时间】:2016-05-18 01:01:03
【问题描述】:

我相信我的配置是正确的,但我想要我的 redis 端口和方案配置选项的默认值,但它们显示为空值?

谁能看出问题出在哪里?

这是我的配置。

/**
 * {@inheritdoc}
 */
public function getConfigTreeBuilder()
{
    $treeBuilder = new TreeBuilder();

    $rootNode = $treeBuilder->root('company_name');
    $rootNode
        ->children()
            ->arrayNode('cache')
                ->children()
                    ->arrayNode('redis')
                        ->addDefaultsIfNotSet()
                        ->treatNullLike([
                            'scheme' => 'tcp',
                            'port' => 6379,
                        ])
                        ->children()
                            ->scalarNode('scheme')
                                ->defaultValue('tcp')
                            ->end()
                            ->scalarNode('host')
                                ->isRequired()
                                ->cannotBeEmpty()
                            ->end()
                            ->integerNode('port')
                                ->defaultValue(6379)
                            ->end()
                        ->end()
                    ->end()
                ->end()
            ->end()
        ->end();

    return $treeBuilder;
}

这是我的 parameters.yml 文件

parameters:
    company_name:
        cache:
            redis:
                host: dev-sessionstore.companyname.com
                schema: ~
                port: ~

控制台输出:

$ php bin/console config:dump-reference CompanyNameCacheBundle
# Default configuration for "CompanyNameCacheBundle"
company_name:
    cache:
        redis:
            namespace:            apps
            scheme:               tcp
            host:                 ~ # Required
            port:                 6379
        apcu:
            namespace:            phpcache

我希望方案和端口使用默认值,但是是什么导致它们为空?

【问题讨论】:

    标签: php configuration symfony


    【解决方案1】:

    我知道这是一个老问题,但我在谷歌搜索另一个问题时偶然发现了它,发现它没有答案。

    问题在于您只指定应如何处理整个 redis 数组的 null 值,而不是 schemeport 值。您指定了它们的默认值,但是因为您将这些单独的键设置为 null,所以您需要指定每个键的 null 应如何处理:

    /**
     * {@inheritdoc}
     */
    public function getConfigTreeBuilder()
    {
        // Using an array so the values only need to be changed in one place
        $redisDefaults = [
            'scheme' => 'tcp',
            'port' => 6379,
        ];
    
        $treeBuilder = new TreeBuilder();
    
        $rootNode = $treeBuilder->root('company_name');
        $rootNode
            ->children()
                ->arrayNode('cache')
                    ->children()
                        ->arrayNode('redis')
                            ->addDefaultsIfNotSet()
                            ->treatNullLike($redisDefaults)
                            ->children()
                                ->scalarNode('scheme')
                                    ->defaultValue($redisDefaults['scheme'])
                                    ->treatNullLike($redisDefaults['scheme'])
                                    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                ->end()
                                ->scalarNode('host')
                                    ->isRequired()
                                    ->cannotBeEmpty()
                                ->end()
                                ->integerNode('port')
                                    ->defaultValue($redisDefaults['port'])
                                    ->treatNullLike($redisDefaults['port'])
                                    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                ->end()
                            ->end()
                        ->end()
                    ->end()
                ->end()
            ->end();
    
        return $treeBuilder;
    }
    

    您的参数文件中还有一个错字,应该是scheme,而不是schema

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多