В настоящее время я загружаю несколько конфигурационных файлов, содержащих встроенные в PHP массивы, в моем бутстрапе.
require "app/configuration/config-global.php"; require "app/configuration/config-other.php";
С помощью этой настройки «config-other.php» перезаписывает массив $ settings «config-global.php».
Могу ли я получить несколько советов о том, как добавить массив в мой загрузочный файл, пожалуйста.
Тим
Обновить
Вот вырезанная версия моей настройки файла bootstap, пытающаяся реализовать предложение Николаоса.
class Application extends \Phalcon\Mvc\Application { /** * Register the services here to make them general or register in the ModuleDefinition to make them module-specific */ public function _registerServices() { //Define constants $di = new \Phalcon\DI\FactoryDefault(); $loader = new \Phalcon\Loader(); $di->set('registry', function () { return new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS); }); //load our config into the registry //$di->set('config', $config); $this->setDI($di); } public function _loadConfig() { $di = \Phalcon\DI::getDefault(); $this->processConfig('appConfig1'); $this->processConfig('globalConfig'); // Remember config_array is the merged array in the DI container $new_array = $di->registry->offsetGet('config_array'); // Optional, store the config in your DI container for easier use $di->set('config', function () use ($new_array) { return new \Phalcon\Config($config); } ); } public function main() { $this->_registerServices(); $this->_loadConfig(); echo $this->handle()->getContent(); } public function processConfig($name) { $config = array(); $di = \Phalcon\DI::getDefault(); if ($di->registry->offsetExists('config_array')) { $config = $di->registry->offsetGet('config_array'); } // Now get the file from the config require "/config/{$name}.php"; // $settings came from the previous require $new_config = array_merge($config, $settings); // Store it in the DI container $di->registry->offsetSet('config_array', $new_config); } } $application = new Application(); $application->main();
С приведенной выше конфигурацией я получаю:
[02-Dec-2012 09:10:43] Замечание PHP: неопределенное свойство: Phalcon \ DI \ FactoryDefault :: $ registry в /public/frontend/index.php в строке 127
[02-Dec-2012 09:10:43] PHP Неустранимая ошибка: вызов функции-члена offsetExists () для не-объекта в /public/frontend/index.php в строке 127
Попробуй это:
Зарегистрировать новую услугу в контейнере DI
// Get the DI container $di = \Phalcon\DI::getDefault(); $di->set( 'registry', function () { return new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS); } );
Вышеупомянутый будет «реестром», в котором мы будем хранить файлы конфигурации.
public function processConfig($name) { $config = array(); $di = \Phalcon\DI::getDefault(); if ($di->registry->offsetExists('config_array')) { $config = $di->registry->offsetGet('config_array'); } // Now get the file from the config require ROOT_PATH . "app/configuration/{$name}.php"; // $settings came from the previous require $new_config = array_merge($config, $settings); // Store it in the DI container $di->registry->offsetSet('config_array', $new_config); }
И как использование вы можете сделать это:
processConfig('config-global'); processConfig('config-other'); // Remember config_array is the merged array in the DI container $di = \Phalcon\DI::getDefault(); // Remember config_array is the merged array in the DI container $new_array = $di->registry->offsetGet('config_array'); // Optional, store the config in your DI container for easier use $di->set( 'config', function () use ($new_array) { return new \Phalcon\Config($config); } };
Теперь в config
массиве в контейнере объединены данные.
Вы также можете создать класс, который будет инкапсулировать эту функциональность и иметь другие вспомогательные функции, чтобы очистить ссылку на контейнер DI, постоянно загружать базовый массив (глобальный) и т. Д.
EDIT : немного изменилось после комментариев