2017-04-24 25 views
0

我在YAML配置API中很努力,可以找到here。我用例:Silverstripe 3配置条件

我有2“配置”的属性

class Foo extends Object { 
    private static $host = null; 
    private static $port = null; 
} 

现在我每环境需要不同的主机名称,但相同的端口类。 假设,在dev环境中,$ host应该是1.1.1.1,并且在live环境中ist必须是2.2.2.2。端口应该设置为10000;

--- 
Name: myexcitingconfig 
--- 
Only: 
    environment: 'dev' 
--- 
Foo: 
    host: '1.1.1.1' 
    port: 10000 
--- 
Only: 
    environment: 'live' 
--- 
Foo: 
    host: '2.2.2.2' 
    port: 10000 
--- 
Bar: 
    test: 'hooray' 

在这个例子中,“富”的所有属性都为空,只有“吧:::

其他所有的部分应为所有类型的env

config.yml(不工作)是有效的测试“已设置。

Debug::dump(Config::inst()->get('Foo', 'host')); // => null 
Debug::dump(Config::inst()->get('Foo', 'port')); // => null 
Debug::dump(Config::inst()->get('Bar', 'test')); // => 'hooray' 

我在做什么错?

+0

是您的类命名空间? – bummzack

+0

@bummzack:不,不是 – derRobert

回答

2

我想你的YAML文件的结构方式,你的实际配置指令被误解为YAML文件“标题”,你的基于环境的规则被解释为配置。你有没有尝试过这样的事情?

--- 
Name: myexcitingconfig 
--- 
# Global config here 
Bar: 
    test: 'hooray' 

--- 
Only: 
    environment: 'dev' 
--- 
Foo: 
    host: '1.1.1.1' 
    port: 10000 
--- 
Only: 
    environment: 'live' 
--- 
Foo: 
    host: '2.2.2.2' 
    port: 10000 
--- 

另外,使用命名空间类时,应该在YAML文件中编写完全限定的类名。所以,如果Foo是在命名空间My\Awesome\Module,你的配置项是:

My\Awesome\Module\Foo: 
    host: '2.2.2.2' 
    port: 10000 
+0

是的!看起来,在“仅”条件之后没有配置设置被解析。 下面的作品,但不是最后一个 “test2的” 属性: ' --- 名称:myexcitingconfig --- 酒吧: 测试: '万岁' --- 只有: 环境: '开发' --- 富: 主持人: '1.1.1.1' 端口:10000 --- 只有: 环境: '活' --- 富: 主持人: '2.2.2.2' 端口: 10000 --- 酒吧: test2:'hooray,也' ' – derRobert

0

是的!看起来,在“仅”条件之后没有配置设置被解析。 以下工作,但不是最后一个“test2”属性:

--- 
Name: myexcitingconfig 
--- 
Bar: 
    test: 'hooray' 
--- 
Only: 
    environment: 'dev' 
--- 
Foo: 
    host: '1.1.1.1' 
    port: 10000 
--- 
Only: 
    environment: 'live' 
--- 
Foo: 
    host: '2.2.2.2' 
    port: 10000 
--- 
Bar: 
    test2: 'hooray, also' 
+0

我认为你的评估是错误的。配置设置应该在“仅”条件之后进行解析,但不能在一个yaml文件中“重新配置”两次相同的对象。如果你的顶部有'Bar',底部有'Baz',我相当确信它会收到'Baz'...... – bummzack