Я хотел удобство использования Zend_Config, сохраняя при этом возможность использовать константу APPLICATION_PATH, поэтому я решил исправить файл простым регулярным выражением после того, как Zend_Config_Writer сохранил файл.

тоящее время я работаю над системой сборки в Phing, которая берет шаблон проекта Zend Framework и настраивает его в соответствии с параметрами Phing. Одна проблема, с которой я столкнулся, - это использование Zend_Config_Writer_Ini.

Моя задача Phing берет предварительно заполненный файл из репозитория application.default.ini и модифицирует его с помощью Zend_Config_Ini для добавления параметров из файла сборки (подробности о БД и т. Д.). Затем он записывает его в application.ini, готовый для использования в проекте. Упрощенная версия кода связанной задачи выглядит примерно так:

$appConfig = new Zend_Config_Ini(
    $appDefaultConfigPath, 
    null, 
    array(
        'skipExtends' => true,
        'allowModifications' => true
    )
);

$appConfig->production->resources->db->params->host = $buildProperties->db->host;
$appConfig->production->resources->db->params->username = $buildProperties->db->username;
$appConfig->production->resources->db->params->password = $buildProperties->db->password;
$appConfig->production->resources->db->params->dbname = $buildProperties->db->dbname;

$writer = new Zend_Config_Writer_Ini();
$writer->setConfig($appConfig)
       ->setFilename($appConfigPath)
       ->write();

Это прекрасно работает, если использовать учетные данные базы данных, но когда дело доходит до предварительно заполненных путей, включающих определенные константы, что-то идет не так. Например:

bootstrap.path = APPLICATION_PATH "/Bootstrap.php"

будет выглядеть так:

bootstrap.path = "APPLICATION_PATH/Bootstrap.php"

Есть ли способ сохранить эти строки конфигурации при чтении / записи в разные INI-файлы, или я должен реструктурировать свой файл сборки, чтобы скопировать файл перед запуском задачи и изменить только те INI-строки, которые мне нужно изменить?

Ответы на вопрос(1)

Ваш ответ на вопрос