【问题标题】:Setting a Symfony 2 configuration option based on (the value of) another one or the environment?根据另一个或环境(的值)设置 Symfony 2 配置选项?
【发布时间】:2012-09-24 11:28:11
【问题描述】:

如果环境是“测试”,我如何将“disable_delivery”设置为默认值true?这甚至可能吗?

另一个问题是如何根据另一个配置选项(如“用户名”)设置它?

$rootNode
    ->children()
        ->scalarNode('method')
            ->isRequired()
            ->cannotBeEmpty()
            ->validate()
                ->ifNotInArray($methods)
                ->thenInvalid('The method %s is not supported.')
            ->end()
        ->end()
        ->scalarNode('username')->isRequired()->cannotBeEmpty()->end()
        ->scalarNode('password')->isRequired()->cannotBeEmpty()->end()
        ->booleanNode('disable_delivery')->end()
    ->end()
;

【问题讨论】:

    标签: symfony symfony-2.1


    【解决方案1】:

    更好的方法是在你的 config_test.yml 配置文件中设置这个变量。

    如果您仍想使用默认值:将容器实例传递给您的配置类并使用:

    ->booleanNode('disable_delivery')->defaultValue('test' === $this->container->get(‘http_kernel’)->getEnvironment() ? true : false)->end()
    

    但这似乎不是个好主意。

    同第二个问题:在配置文件中使用参数。对于您的捆绑包的最终用户(您将在两到三个月内)来说,它更加简单和清晰。

    【讨论】:

    • 看起来很合理。对于我的第二个问题,我无法理解如何在我的 Configuration 类中实现该行为。您能否提供一个示例,即如果提供了usernamepassword,则将disable_delivery 设置为false
    • 我说的是配置参数 (symfony.com/doc/2.0/book/…)。您可以在 parameters.ini|yml 文件中定义它并在配置文件中重用它们。我明白你的意思,但还没有答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多