12

我有一些自定义应用程序特定设置,我想放入一个配置文件。我会把这些放在哪里?我考虑过/config/autoload/global.php 和/或local.php。但我不确定我应该在配置数组中使用哪个键以确保不覆盖任何系统设置。

我在想这样的事情(例如在 global.php 中):

return array(
    'settings' => array(
        'settingA' => 'foo',
        'settingB' => 'bar',
    ),
);

那是一种合意的方式吗?如果是这样,我怎样才能访问设置,例如从控制器内?

高度赞赏提示。

4

4 回答 4

16

如果您需要为特定模块创建自定义配置文件,您可以在module/CustomModule/config文件夹中创建额外的配置文件,如下所示:

module.config.php
module.customconfig.php

这是您的module.customconfig.php文件的内容:

return array(
    'settings' => array(
        'settingA' => 'foo',
        'settingB' => 'bar',
    ),
);

然后您需要更改CustomModule/module.php文件中的getConfig()方法:

public function getConfig() {
    $config = array();
    $configFiles = array(
        include __DIR__ . '/config/module.config.php',
        include __DIR__ . '/config/module.customconfig.php',
    );
    foreach ($configFiles as $file) {
        $config = \Zend\Stdlib\ArrayUtils::merge($config, $file);
    }
    return $config;
}

然后您可以在控制器中使用自定义设置:

 $config = $this->getServiceLocator()->get('config');
 $settings = $config["settings"];

这对我有用,希望对您有所帮助。

于 2013-08-10T11:08:12.557 回答
12

你用你的module.config.php

return array(
    'foo' => array(
        'bar' => 'baz'
    )

  //all default ZF Stuff
);

在您的内部,您*Controller.php可以通过以下方式调用您的设置

$config = $this->getServiceLocator()->get('config');
$config['foo'];

就这么简单 :)

于 2012-10-21T09:31:53.410 回答
9

您可以使用以下任何选项。

选项1

创建一个名为 config/autoload/custom.global.php 的文件。在 custom.global.php

return array(
    'settings' => array(
        'settingA' => 'foo',
        'settingB' => 'bar'
    )
)

在控制器中,

$config = $this->getServiceLocator()->get('Config');
echo $config['settings']['settingA'];

选项 2

在 config\autoload\global.php 或 config\autoload\local.php

return array(
    // Predefined settings if any
    'customsetting' => array(
        'settings' => array(
            'settingA' => 'foo',
            'settingB' => 'bar'
         )
    )
)

在控制器中,

$config = $this->getServiceLocator()->get('Config');
echo $config['customsetting']['settings']['settingA'];

选项 3

在 module.config.php

return array(
    'settings' => array(
        'settingA' => 'foo',
        'settingB' => 'bar'
    )
)

在控制器中,

$config = $this->getServiceLocator()->get('Config');
echo $config['settings']['settingA'];
于 2013-08-10T17:47:38.990 回答
4

如果你看config/application.config.php它说:

'config_glob_paths'    => array(
    'config/autoload/{,*.}{global,local}.php',
),

所以 ZF2 默认情况下会自动加载配置文件config/autoload/- 例如,你可以myapplication.global.php让它被拾取并添加到配置中。

Evan.pro 写了一篇博客文章,涉及到这一点:https ://web.archive.org/web/20140531023328/http://blog.evan.pro/environment-specific-configuration-in-zend-framework-2

于 2012-10-21T23:06:02.067 回答