我正在开发一个ZF2项目,我的public / index.php文件如下:
<?php
chdir(dirname(__DIR__));
require 'init_autoloader.php';
Zend\Mvc\Application::init(require 'config/application.config.php')->run();
应用程序初始化过程从使用application.config.php开始,我知道ZF2提供了很好的方法来通过文件名(如modulename.local.php)在本地覆盖模块配置,但不能用于application.config.php文件。
例如,在application.config.php中,我有一个module_listener_options键,如下所示:
return array(
'modules' => array(
// ...
),
'module_listener_options' => array(
'module_paths' => array(
// ...
),
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
'config_cache_enabled' => TRUE,
'config_cache_key' => 'configuration_cache',
'cache_dir' => __DIR__ . '/../data/cache'
// ...
)
所以我想在处理开发环境时在本地禁用配置缓存,但我想在生产环境中打开它,而不需要部署后的技巧(比如编写自定义git-hook / bash脚本等)。
此外,我在所有服务器上都有一个APPLICATION_ENVIRONMENT
$_ENV
变量(dev,prod,test)我不知道在ZF2中实现此目的的最佳方法是什么。
我找到Stephen Rees-Carter's article,是的解决了这个问题,但我想知道是否还有其他/更优雅的解决方案,而不依赖于作曲家。
答案 0 :(得分:4)
您可以在应用配置中测试环境变量并相应地设置缓存,例如,
<?php
// application.config.php
$env = getenv('APPLICATION_ENVIRONMENT');
$configCacheEnabled = ($env == 'production');
return array(
//..
'config_cache_enabled' => $configCacheEnabled,
//..
);
答案 1 :(得分:4)
以下是仅在开发设置中包含模块的示例,其中包含本地文件覆盖。 如果您希望仅在存在本地配置文件的情况下覆盖,则可以轻松删除环境变量检查。
<强> application.config.php 强>
$config = array(
'modules' => array(
'Application',
'ZfcBase',
),
'module_listener_options' => array(
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
'module_paths' => array(
'./module',
'./vendor',
),
),
);
if(getenv('APPLICATION_ENV') == 'development' && is_readable('config/autoload/application.config.local.php')){
$localAppConfig = require 'config/autoload/application.config.local.php';
$config = array_merge_recursive($config,$localAppConfig);
}
return $config;
<强>配置/ application.config.local.php 强>
return array(
'modules' => array(
'ZendDeveloperTools',
'ZFTool'
),
/**
* Add any overrides to the new local config
*/
);
然后,您只需向本地文件添加覆盖,这对于登台和生产环境可能会有所不同。