2013-09-11 4 views
0

Так что я создаю semi-popular open source project и ищу способы для его пользователей настроить свою копию.Разрешить пользователям проекта с открытым доступом добавлять свои собственные файлы в свою копию

В принципе, у меня нет опыта с использованием Composer и рядом с ним нет подмодулей git. У меня есть этот файл структура толкнула мерзавец:

/ROOT 
----/subdirectory/ 
---------/another.file.php 
----/main.class.php 
----/config.default.php 

Было бы идеально подходят для пользователей, чтобы иметь возможности копировать config.default.php в тот же каталог, переименовать его в config.php (и, делая это, переопределяет значение конфигурации по умолчанию) - и Я бы хотел, чтобы они могли добавлять свои собственные файлы в /subdirectory/, что позволяло им расширять инструмент до их уникальных требований.

Вопрос в том, не обрабатываются ли эти файлы, когда тянет (в случае субмодуля git) или выполняется обновление Composer? Если да, то как я могу достичь требований с минимальными усилиями для конечного пользователя, как это возможно:

  1. Один, по желанию, свободно редактируемые конфигурационный файл
  2. Два каталогов, которые могут содержать файлы, создаваемые пользователями
  3. Вышеперечисленные изменения остаются в пределах собственной системы управления версиями пользователей и не удаляются при получении новой версии.

Благодарим за ваше терпение заранее.

ответ

3

Что большинство фреймворки приложений/CMSs делают эти дни, чтобы разбить этот процесс на два пакета:

  • одна библиотека пакета (например, Symfony/Symfony, Laravel/каркас), который содержит большую часть кода, и который будет установлен в вендоре/
  • один пакет «bootstrap» (например, symfony/framework-standard-edition, laravel/laravel), который содержит оболочку приложения, с которой могут начинаться ваши пользователи. Это будет содержать конфигурацию по умолчанию и композитор.json, который включает в себя пакет библиотеки + все, что необходимо в разделе «require». Этот пакет bootstrap обычно не обновляется через композитор, так как он становится приложением/сайтом ваших пользователей. Поэтому он должен содержать как можно меньше кода и быть по существу только конфигурацией.
+0

Спасибо, я поклонник вашего PHP-консоли, кстати, был смысл тянуть запрос на обновление до Kint от Krumo. Я буду помнить ваш ответ, но я все еще надеюсь, что есть более легкое решение для того, что кажется такой общей проблемой. – raveren

0

В настоящее время вы загрузите пользователь конфигурацию, когда ваш класс нагрузка:

if (is_readable(KINT_DIR . 'config.php')) { 
    require KINT_DIR . 'config.php'; 
} 

Если вы добавили свойство общественного setConfig(), то конфигурация может быть расположена в любом месте, и ваше по умолчанию будет по-прежнему работать (код с верхней части моей головы крошечного):

Public static function setConfig($config) { 
    if (is_readable($config)) { 
     require $config; 
    } 
} 
Смежные вопросы