2017-04-24 23 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