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


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

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

3 75

3 ответа:

создать новый пустой проект 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

добавить композитор.файл JSON

src/Company/DemoBundle/composer.json:

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

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

используйте его в другом проект

композитор.json:

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

Do:

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

app / AppKernel:

new Company\DemoBundle\CompanyDemoBundle(),

работы на

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

вывод

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

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

в качестве доказательства, просто запустите git remote -v любой узел торговец.

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

В Symfony4, generate:bundle команда больше не доступна. Вместо этого, вы можете следовать в этом уроке.

сначала создайте проект с помощью:

composer create-project symfony/website-skeleton my-project

затем создайте :

"autoload": {
    "psr-4": {
        "Acme\AcmeFooBundle\": "lib/AcmeFooBundle/src/",
    }
}, 

и работать composer dump-autoload.

теперь вам нужно только добавить свой класс bundle в config/bundles.php:

return [
    ...
    Acme\AcmeFooBundle\AcmeFooBundle::class => ['all' => true],
];

и инъекция зависимостей для загрузки конфигурации из вашего пакета.

если вы хотите проверить свои службы перед добавлением инъекции зависимостей, вы можете просто автоматически подключить их по адресу config/services.yml:

services:
    ...
    Acme\AcmeFooBundle\Services\Foo: ~

вот и все. Следуйте лучшие практики и продолжайте кодировать.

PS: я опубликовал сообщение с несколько советов по разработке многоразовых пакетов Symfony.