2016-03-17 62 views
1

我在理解symfony中如何解析yml文件方面存在問題。在symfony2中解析yml

我跑我的命令,如:dropcat --env=dev



    public function __construct() 
    { 
    $input = new ArgvInput(); 
    $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev'); 
    $running_path = getcwd(); 
    $config = Yaml::parse(
     file_get_contents($running_path .'/' . $env . '_dropcat.yml') 
    ); 
    $this->configuration = $config; 
    } 

在我的文件(dev_dropcat.yml)我有:



    imports: 
     - { resource: 'dropcat.yml' } 
    remote: 
     environment: 
     server: myhosts 

我的理解是,在dropcat.yml內容應進口以及解析dev_dropcat.yml時,但它不。有人可以指引我正確的方向?

回答

0

方法Yaml::parse不是按照您的期望設計的。它只需要yml內容並將其更改爲數組。它不會導入任何東西,所以你的imports子句將只是一個數組的關鍵 - 僅此而已。

+0

那麼,我該怎麼做呢? –

+0

你想要達到什麼樣的目標? –

0

可能你想把這些配置放在parameters.yml中,或者你可能想在config.yml中添加一行到import。

除非由於某些原因,您不希望它們自動加載?

在config.yml的頂部附近注入下面的行應該這樣做否則。

- { resource: 'dropcat.yml' } 

如果要加載不同的版本不同的環境中,你可以使用config_prod.yml,config_test.yml和config_dev.yml。

http://symfony.com/doc/current/cookbook/configuration/configuration_organization.html

+0

這個dropcat應用程序是menat成爲網站的部署工具,所有網站都有自己的默認配置(dropcat.yml),不同的環境有他們的文件(如dev_dropcat.yml)從默認配置覆蓋。 Dropcat旨在從它運行的目錄中獲取配置,因此不需要爲symfony應用程序本身(dropcat)進行默認配置,因爲所有站點都具有不同的配置。 我想使用導入,因爲我不想重複配置。 –

+0

然後,您可能想要在config.dev.yml中使用dev_dropcat.yml包含config.yml(或config_prod.yml)中的dropcat.yml和dev_dropcat.yml。 這裏的關鍵是在'resource:'之後的'resource:'../../ localapp/dropcat.yml''之類的地方添加一個更詳細的路徑。我認爲。 讓我知道如果這是你的意思,所以我可以更新我的答案。 –

0

我工作圍繞它沒有使用陽明海運進口,首先我加載默認陽明海運(dropcat.yml),如果它確實存在,環境文件(dev_dropycat.yml)。

public function __construct() 
{ 
    $input = new ArgvInput(); 
    $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev'); 
    $running_path = getcwd(); 
    if (file_exists($running_path . '/dropcat.yml')) { 
     $default_config = Yaml::parse(
      file_get_contents($running_path . '/dropcat.yml') 
     ); 
     $configs = $default_config; 
    } 

    // Check for env. dropcat file. 
    if (file_exists($running_path . '/' . $env . '_dropcat.yml')) { 
     $env_config = Yaml::parse(
      file_get_contents($running_path .'/' . $env . '_dropcat.yml') 
     ); 
     // Recreate configs if env. exists. 
     if (isset($default_config)) { 
      $configs = array_replace_recursive($default_config, $env_config); 
     } else { 
      $configs = $env_config; 
     } 
    } else { 
     echo "No configuration found for the specified environment $env, using default settings\n"; 
    } 
    if (isset($configs)) { 
     $this->configuration = $configs; 
    } else { 
     $this->configuration = null; 
    } 
} 

我可以做得更漂亮,但它適用於我想達到的目的。