ZF2应用程序包含许多不同的配置文件:/config/application.config.php
,/config/autoload/global.php
,/config/autoload/local.php
,/module/***/config/module.config.php
。
现在我已经编写了一个模块,它涵盖了应用程序的缓存功能,并且需要在本地/ dev和实时环境中为其项目的实时时间设置不同的值。我也希望能够根据环境切换缓存类型。
这些东西应该放在哪里?在/config/autoload/global.php
和/config/autoload/local.php
?如果是:是否应首先从Module
类中的这些文件中检索(例如,在onBootstrap()
方法中)或直接使用它,在哪里需要它?
(如果有人能够显示保存和获取此类配置数据的原始示例,那也会很棒。)
答案 0 :(得分:2)
我目前使用的解决方案是:
/config/autoload/global.php
和/或/config/autoload/local.php
return array(
// DB credentials
'db' => array(
'username' => ...,
'password' => ...,
'dbname' => ...,
'host' => ...,
),
'cache_ttl' => 'global/local value for cache live time',
);
缓存Module
类
class Module {
private $moduleConfig;
public function onBootstrap(MvcEvent $mvcEvent) {
$application = $mvcEvent->getParam('application');
$this->moduleConfig = $application->getConfig();
}
...
public function getServiceConfig() {
try {
return array (
'factories' => array(
...
'Zend\Cache\Adapter\MemcachedOptions' => function ($serviceManager) {
return new MemcachedOptions(array(
'ttl' => $this->moduleConfig['cache_ttl'],
...
));
},
...
)
);
}
...
}
}
它工作正常,但我很确定,这不是最好的做法/推荐方式。
答案 1 :(得分:2)
您的基本方法是正确的。
对于缓存配置内容,请将生产值保留在全局文件中。那应该存在于你的VCS中。 (编辑:但是,您应该省略安全敏感配置,例如数据库密码。通过local.php将其添加到生产中以防止其超出版本控制。)
在本地环境中,使用本地文件覆盖需要覆盖的任何内容。 IIRC ZendSkeletonApplication有一个.gitignore文件,它会忽略内置的任何本地配置 - 所以你的本地配置永远不会成为git。
但是,您不需要像在运行时那样在引导程序中加载配置。您可以从工厂方法中的serviceManager中获取配置:
public function getServiceConfig() {
try {
return array (
'factories' => array(
...
'Zend\Cache\Adapter\MemcachedOptions' => function ($serviceManager) {
return new MemcachedOptions(array(
// you can just grab your config from the service-manager
'ttl' => $serviceManager->get('Config')['cache_ttl'],
...
));
},
...
)
);
}
...
}
另外 - 我不会将'cache_ttl'作为顶级配置键。相反,尝试:
<强> global.php 强>
return array(
'cache' => array(
'ttl' => ...,
'servers' => ...,
...
)
);
这简化了您的工厂:
'Zend\Cache\Adapter\MemcachedOptions' => function ($serviceManager) {
return new MemcachedOptions( $serviceManager->get('cache') );
},
你可以在local.php配置中覆盖你想要的任何内容。如果您想要做的就是更改ttl(保留所有其他全局配置):
<强> local.php 强>
return array(
'cache' => array('ttl'=>...)
);