在symfony2中解析yml

时间:2016-03-17 15:09:00

标签: symfony yaml

我在理解如何在symfony中完成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

我的理解是,在解析dev_dropcat.yml时,也应该导入dropcat.yml中的内容,但事实并非如此。谁可以指出我正确的方向?

3 个答案:

答案 0 :(得分:0)

方法Yaml::parse并非旨在满足您的期望。它只需要yml个内容并将其更改为数组。它没有导入任何东西,所以你的imports子句只是数组的一个键 - 仅此而已。

答案 1 :(得分:0)

您可能希望将这些配置放在parameters.yml中,或者您可能希望在config.yml中为导入添加一行。

除非由于某种原因你不想自动加载它们?

在config.yml顶部附近注入以下行,否则应该这样做。

    - { resource: 'dropcat.yml' } 

如果要为不同的环境加载不同的版本,可以使用config_prod.yml,config_test.yml和config_dev.yml。

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

答案 2 :(得分:0)

我没有在yml中使用导入工作,首先我加载默认的yml(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;
    }
}

我猜可以做得更漂亮,但它适用于我想要实现的目标。