4

我正在做一个 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在所有服务器(开发、产品、测试)上都有一个变量,我不知道在 ZF2 中实现这一目标的最佳方法是什么。

我找到了Stephen Rees-Carter 的文章,是的,解决了这个问题,但我想知道是否有任何其他/更优雅的解决方案不依赖于作曲家。

4

2 回答 2

4

您可以在您的应用程序配置中测试您的环境变量并相应地设置缓存,例如,

<?php
// application.config.php
$env = getenv('APPLICATION_ENVIRONMENT');
$configCacheEnabled = ($env == 'production');

return array(
    //..

    'config_cache_enabled' => $configCacheEnabled,

    //..
);
于 2013-04-25T12:34:31.717 回答
4

Here's an example to include modules only on your development setup, with a local file override. You can easily just remove the environment variable check if you wished to just override with the presence of the local config file.

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;

config/application.config.local.php

return array(
    'modules' => array(
        'ZendDeveloperTools',
        'ZFTool'
    ),
    /**
     * Add any overrides to the new local config
     */
);

You can then just add overrides to your local file, which can be different for staging and production environments.

于 2013-04-25T13:52:20.510 回答