У меня есть библиотека PHP на packagist.org, которая использует некоторые константы, меняющиеся от проекта к проекту.
Я пытаюсь использовать такие константы:
Константы магазины в conf.php в библиотеке композитора
После композитор init имя пользователя / mylib команда, я делаю копию из /vendor/username/mylib/conf.php к местному /conf.php и использовать его для текущей конфигурации проекта
для проекта1, в /conf.php
define("HOST", "host1.com");
проект2, в /conf.php
define("HOST", "host2.com");
Но это выглядит как неправильный путь.
Как правильно использовать константы с библиотеками композитора?
Я предпочитаю делать это немного по-другому
в моей библиотеке я бы
/vendor/vendorname/pkg/config/system.php
/vendor/vendorname/pkg/config/local.sample.php
и предоставить инструкции для копирования
/vendor/vendorname/pkg/config/local.sample.php
в
/config/local.php
тогда в моем коде я бы что-то вроде
$sysconffile = static::$vendorbasedir . '/config/system.php';
if (file_exists($sysconffile)) {
$sysconf = require $sysconffile;
} else {
throw new \RuntimeException('Sys Conf Missing!');
}
$localconf = [];
$localconfile = static::$appbasedir . '/config/local.php';
if (file_exists($localconfile)) {
$localconf = require $localconfile;
}
ОБНОВИТЬ:
Я также предпочитаю статические классы с данными, а не с определениями, так как определение очень свободно в документации, подсказках типов и перезаписи.
Поэтому, когда у меня есть оба конфига, я обычно делаю
static::$config = array_replace_recursive($sysconf, $localconf);
Других решений пока нет …