У меня есть PHP-приложение, написанное на Zend Framework. Он использует Phing для системы сборки и PHPUnit для модульного тестирования. Все эти части имеют настройки конфигурации. Zend использует application.xml
, Phing использует build.xml
и, возможно, некоторые build.properties
, а PHPUnit использует phpunit.xml
.
Но где я могу хранить информацию, необходимую для всех трех компонентов? Подумайте о конфигурации базы данных (например, пароли).
В моем случае application.xml
имеет различные разделы (dev, staging, production) с разными конфигурациями базы данных. Недавно я интегрировал ORM в свое приложение, и теперь я хочу протестировать мои модели. Итак, у меня есть четвертая база данных (unittesting), которая используется PHPUnit.
PHPUnit может обрабатывать данные фикстуры, но не схемы базы данных. Итак, я думал, что напишу цель сборки Phing, которая копирует схему базы данных из рабочей или промежуточной в базу данных unittest. Таким образом, у меня есть дополнительное преимущество, заключающееся в том, что я могу даже протестировать скрипты миграции базы данных. Но для этого Phing требуется доступ к нескольким базам данных одновременно.
Моим первым инстинктивным инстинктом было поместить всю конфигурацию для всех четырех баз данных в build.properties
, и Phing просто сгенерировал application.xml
и phpunit.xml
. Но, кажется, грязно , чтобы система сборки генерировала файлы конфигурации.
Какое лучшее решение здесь? Или мне просто дублировать детали конфигурации и не беспокоиться слишком сильно?
Мысли
Я мог бы просто дублировать их. Это всего лишь несколько настроек, и они не должны часто меняться. Но держу пари, что когда они действительно изменятся, я забуду о дублировании (потому что это случается нечасто). Общие параметры включают в себя:
- Конфигурация базы данных (разработка, подготовка, производство и юнит-тесты)
- Включить пути. Мы используем некоторые старые библиотеки, которые не работают с автозагрузчиками. До сих пор мы частично решили эту проблему с помощью интеллектуального файла автоматической подготовки.
- Несколько учетных данных API веб-сервиса