我在理解如何在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中的内容,但事实并非如此。谁可以指出我正确的方向?
答案 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;
}
}
我猜可以做得更漂亮,但它适用于我想要实现的目标。