加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Symfony配置默认值

发布时间:2020-12-13 16:59:31 所属栏目:PHP教程 来源:网络整理
导读:我相信我的配置是正确的,但我想要我的redis端口和方案配置选项的默认值,但它们是以空值形式出现的? 任何人都可以看到问题是什么? 这是我的配置. /** * {@inheritdoc} */public function getConfigTreeBuilder(){ $treeBuilder = new TreeBuilder(); $rootN
我相信我的配置是正确的,但我想要我的redis端口和方案配置选项的默认值,但它们是以空值形式出现的?

任何人都可以看到问题是什么?

enter image description here

这是我的配置.

/**
 * {@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

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

解决方法

我知道这是一个老问题,但我在谷歌搜索一个不同的问题时偶然发现它,并发现它没有得到答复.

问题是您只是指定应该如何处理整个redis数组的null,而不是方案和端口值.您指定了它们的默认值,但由于您将这些单独的键设置为null,因此您需要指定应为每个键处理null的方式:

/**
 * {@inheritdoc}
 */
public function getConfigTreeBuilder()
{
    // Using an array so the values only need to be changed in one place
    $redisDefaults = [
        'scheme' => 'tcp',];

    $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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读