Symfony2 - создание собственного пакета поставщиков - проект и стратегия git

Мы планируем создать собственный common комплект для сопоставления сущностей и сервисов для использования в нескольких отдельных приложениях. Пакет должен быть легко модифицировать, запускать, включать и тестировать. Я знаю о Рекомендации по структурированию наборов, но я не знаю, какую стратегию git использовать, когда дело доходит до разработки.

Должны ли мы создать пакет common как целостный проект и передать весь репозиторий на наш сервер git, или лучше запустить исходный контроль только для корня из common bundle и нажать только его содержимое? Я вижу этот подход в пакетах, доступных на github, но я не знаю, как легко и удобно создавать пакеты таким образом.

Ответ 1

Создайте новый пустой проект symfony

php composer.phar create-project symfony/framework-standard-edition demo/ 2.4.1
cd demo

Создать новый пакет

(например, src/Company/DemoBundle)

php app/console generate:bundle
cd src/Company/DemoBundle/

Инициируйте свой репозиторий github в src/Company/DemoBundle

git init
touch README.md
git add .
git commit -m "initial commit"
git remote add origin https://github.com/YourAccount/DemoBundle.git
git push -u origin master

Добавить файл composer.json

src/Company/DemoBundle/composer.json:

{
    "name" : "company/demobundle",
    "description" : "A demo bundle",
    "type" : "symfony-bundle",
    "authors" : [{
        "name" : "demo",
        "email" : "[email protected]"
    }],
    "keywords" : [
        "demo bundle"
    ],
    "license" : [
        "MIT"
    ],
    "require" : {
    },
    "autoload" : {
        "psr-0" : {
            "Company\\DemoBundle" : ""
        }
    },
    "target-dir" : "Company/DemoBundle",
    "repositories" : [{
    }],
    "extra" : {
    "branch-alias" : {
            "dev-master" : "some_version-dev"
        }
    }
}

Теперь у вас есть базовая структура вашего пакета

Использовать его в другом проекте

composer.json:

    [...]
    "require" : {
        [...]
        "company/demobundle" : "dev-master"
    },
    "repositories" : [{
        "type" : "vcs",
        "url" : "https://github.com/Company/DemoBundle.git"
    }],
    [...]

делать:

curl -sS https://getcomposer.org/installer | php
php composer.phar update company/demobundle

Приложение/AppKernel:

new Company\DemoBundle\CompanyDemoBundle(),

Работа с ней

  • Вы можете клонировать свой DemoBundle в папке src/Company, а затем вручную установить его
  • Вы можете использовать символическую ссылку

Заключение

Вы можете разработать и протестировать свой пакет в своем первом проекте и использовать его с github и composer во втором проекте.

Ответ 2

Важным моментом для вас является то, что вы можете зафиксировать свое репо у /vendor. В самом деле, композитор создает второй пульт, называемый "композитор" для каждого пакета (или пакета), который ссылается на репо пакета, чтобы вы могли работать над ним в рабочем контексте. Поэтому хорошей практикой является регистрация вашего пакета в вашем composer.json для всех ваших проектов и передача из вашего /vendor/MyCompany/MyBundle из любого проекта.

В качестве доказательства просто запустите git remote -v из любого пакета в вашем поставщике.

Плохая практика заключается в том, чтобы рассмотреть ваш комплект как отдельный проект и иметь с ним символические ссылки. Основная причина, по которой это неверная практика, заключается в том, что вы не сможете объявлять зависимости с вашим пакетом. Кроме того, у вас возникнут трудности с развертыванием ваших проектов.