Zend framework2 zf2,application.config->;以yaml格式配置全局路径

Zend framework2 zf2,application.config->;以yaml格式配置全局路径,zend-framework2,Zend Framework2,我已经使用YAML格式的配置文件设置了我的hole应用程序。当涉及到application.config文件中模块_listener_选项的全局路径时,它以以下堆栈跟踪结束所有乐趣: 应用程序配置 模块: - # ... 几个不同的模块 模块\u侦听器\u选项: 配置全局路径: -config/global/{,*.}{shared,private}.yaml 模块路径: - # ... 模块路径 堆栈跟踪 我想我需要向YAML阅读器注入一个YAML解码器。我在代码的其他部分中使用 所以我要问

我已经使用YAML格式的配置文件设置了我的hole应用程序。当涉及到application.config文件中模块_listener_选项的全局路径时,它以以下堆栈跟踪结束所有乐趣:

应用程序配置
模块:
- # ... 几个不同的模块
模块\u侦听器\u选项:
配置全局路径:
-config/global/{,*.}{shared,private}.yaml
模块路径:
- # ... 模块路径
堆栈跟踪 我想我需要向YAML阅读器注入一个YAML解码器。我在代码的其他部分中使用


所以我要问你的问题是如何将解码器注入工厂?或者,如果有其他方法可以做到这一点,那么如何解决这个问题呢?

所以我想我可以通过向模块类添加以下
init
函数来解决这个问题:

使用Symfony\Component\Yaml\Parser作为YamlParser,
Zend\Config\Factory作为ConfigFactory;
// ...
公共函数init()
{
//第一行仅用于较短的yml后缀
ConfigFactory::registerReader('yml','yaml');
//将解析器添加到读取器
$decoder=newyamlparser();
$reader=ConfigFactory::getReaderPluginManager()->get('yaml');
$reader->setYamlDecoder([$decoder,'parse']);
}


不过,我仍然对解决这个问题的另一种方法非常感兴趣。

因此我发现我可以通过向模块类添加以下
init
函数来解决这个问题:

使用Symfony\Component\Yaml\Parser作为YamlParser,
Zend\Config\Factory作为ConfigFactory;
// ...
公共函数init()
{
//第一行仅用于较短的yml后缀
ConfigFactory::registerReader('yml','yaml');
//将解析器添加到读取器
$decoder=newyamlparser();
$reader=ConfigFactory::getReaderPluginManager()->get('yaml');
$reader->setYamlDecoder([$decoder,'parse']);
}


不过,我仍然对解决这个问题的另一种方法非常感兴趣。

在文档中,他们为解析器使用了一个外部库

如果要使用外部YAML读取器,必须在类的构造函数中传递回调函数。例如,如果您想使用Spyc库

// include the Spyc library
require_once ('path/to/spyc.php');

$reader = new Zend\Config\Reader\Yaml(array('Spyc','YAMLLoadString'));
$data   = $reader->fromFile('/path/to/config.yaml');
您还可以在不带任何参数的情况下实例化Zend\Config\Reader\Yaml,并立即使用setYamlDecoder()方法指定Yaml读取器


这个解决方案为我解决了这个问题,因为在文档中,我暂时不使用任何其他yaml解析器,它们使用外部库作为解析器

如果要使用外部YAML读取器,必须在类的构造函数中传递回调函数。例如,如果您想使用Spyc库

// include the Spyc library
require_once ('path/to/spyc.php');

$reader = new Zend\Config\Reader\Yaml(array('Spyc','YAMLLoadString'));
$data   = $reader->fromFile('/path/to/config.yaml');
您还可以在不带任何参数的情况下实例化Zend\Config\Reader\Yaml,并立即使用setYamlDecoder()方法指定Yaml读取器

这个解决方案为我解决了这个问题,因为我暂时不使用任何其他yaml解析器