Ответы пользователя по тегу CVS
  • Как организовать контроль версий двух одинаковых сайтов?

    copist
    @copist
    Empower people to give
    Нужно 3 ветки в репозитории - ядро + сайт1 + сайт2

    в репозиториях сайт1 и сайт2 делаете git submodule ядро

    теперь сайт1 и сайт2 содержат ядро как часть кода

    но это сработает только в том случае, когда сайт1 и сайт2 используют ядро, но не модифицируют его. Допустимо наследование, замена классов, настройка через файл конфигурации

    Например, ядро содержит файл HttpRequest.php с классом HttpRequest
    А в приложении сайт1 требуется дополнительные функции в этом классе
    Тогда возможны два варианта решения в зависимости от того, что реализовано в ядре:

    1. Настройка автозагрузки файлов
    Создаём копию файла Site1HttpRequest.php c определением класса HttpRequest в коде сайт1
    Настраиваем autoloader для сайт1 так, чтобы при обращении к определению класса HttpRequest использовался файл Site1HttpRequest.php

    2. Локатор (инверсия зависимостей)
    В коде ядра создаём класс-локатор для хранения часто используемых экземпляров, которые он возвращает по ключевому имени. Например сущность с ключом request - это экземпляр класса HttpRequest.
    В коде сайт1 создаём класс Site1HttpRequest, который наследует HttpRequest из ядра, расширяем или переопределяем функционал.
    В настройках класса-локатора для сайт1 пишем, что если требуется экземпляр к кодом request, то должен загрузиться класс Site1HttpRequest.

    Ссылки и куски кода:
    1. git submodules
    2. Использование таблицы классов в фреймворке Yii
    Yii::$classMap=array(
            'HttpRequest'=>'/path/to/HttpRequest.php', // <-- можно указать другой путь к классу
    );
    Yii::createWebApplication($config)->run();

    3. Application - класс-локатор в фреймворке Yii
    # @file protected/config/main.php
    array(
        'components' => array(
             'request' => array(
                'class' => 'HttpRequest', // <-- можно указать другой класс
            ),
        ),
    );
    Ответ написан
    Комментировать