2015-05-05 4 views

ответ

0

Существующие значения конфигурации могут быть просто переопределены пользовательской настройкой их внутри файла config.php в папке конфигурации ваших модулей. Вам не нужно делать это, используя ServiceLocator. Массив в этом файле является глобальным массивом. Ключи в массиве будут перезаписаны в том порядке, в котором вы загружаете свои модули.

+0

Я знаю это. Я хочу переопределить конфигурацию, например, в функции onBootstrap module.php – user3314010

+1

@ user3314010 Возможно, вы можете объяснить, чего вы хотите достичь? Я думаю, что config должен быть статическим. Если вы создадите конфигурационную динамику, вы можете столкнуться с проблемами. Вы можете загрузить/установить пользовательскую конфигурацию для определенных служб внутри своих заводов. – Wilt

+1

Нашли решение, которое работает для меня: $ serviceLocator-> setAllowOverride (true); $ serviceLocator-> setService ('config', $ configuration); $ serviceLocator-> setAllowOverride (false); – user3314010

6

Да, вы можете это сделать. Должны ли вы это делать, это целый вопрос. Итак:

$this->serviceLocator->setAllowOverride(true); 
// service keys are case insensitive 
// just remember that $this->config should contain the whole config 
$this->serviceLocator->setService('Config', $this->config); 
$this->serviceLocator->setAllowOverride(false); 

Для setService работы необходимо переключить флаг под названием allowOverride. Вы можете видеть это here. Впоследствии вы должны, вероятно, отключить переопределения, следовательно, еще один вызов setAllowOverride.

Также: you can hook into EVENT_MERGE_CONFIG and change it there.

+0

Это сработало отлично для меня. К сожалению, мне пришлось добавить в конфигурацию во время выполнения, но альтернатива была переоценка тонны классов zend, которая всегда была болью :) – Stephen

Смежные вопросы