Где установить пользовательские настройки в Zend Framework 2?
У меня есть специальные настройки для конкретного приложения, я хочу добавить файл конфигурации. Куда бы я их положил? Я считал /config/autoload/global.php и/или local.php. Но я не уверен, какие ключи я должен использовать в конфигурационном массиве, чтобы не переопределять какие-либо системные настройки.
Я думал о чем-то подобном (например, в global.php):
return array(
'settings' => array(
'settingA' => 'foo',
'settingB' => 'bar',
),
);
Это приятный способ? Если да, то как я могу получить доступ к настройкам, например. изнутри контроллера?
Советы приветствуются.
Ответы
Ответ 1
Если вам нужно создать собственный файл конфигурации для определенного модуля, вы можете создать дополнительный файл конфигурации в папке module/CustomModule/config, примерно так:
module.config.php
module.customconfig.php
Это содержимое вашего файла module.customconfig.php:
return array(
'settings' => array(
'settingA' => 'foo',
'settingB' => 'bar',
),
);
Затем вам нужно изменить способ getConfig() в файле CustomModule/module.php:
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"];
это работа для меня и надеюсь, что она вам поможет.
Ответ 2
Вы используете module.config.php
return array(
'foo' => array(
'bar' => 'baz'
)
//all default ZF Stuff
);
Внутри *Controller.php
вы можете позвонить своим настройкам через
$config = $this->getServiceLocator()->get('config');
$config['foo'];
Это так просто:)
Ответ 3
Вы можете использовать любую опцию из следующих.
Вариант 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'];
Ответ 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