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


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

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

Author: Darryl Hein, 2014-02-03

3 answers

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

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

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

Композитор.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

Приложение/ядро приложения:

new Company\DemoBundle\CompanyDemoBundle(),

Работайте над этим

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

Заключение

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

 171
Author: VBee, 2016-11-06 02:45:48

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

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

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

 16
Author: flouflou2000, 2016-11-06 03:08:50

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

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

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

Затем создайте каталог my-project/lib/AcmeFooBundle/src. Здесь будет жить твой сверток. Пространство имен для этого каталога будет Acme\AcmeFooBundle, поэтому, если вы создадите класс обслуживания в lib/AcmeFooBundle/src/Service/Foo.php, его пространство имен будет Acme\AcmeFooBundle\Service.

Теперь нам нужно сказать загрузчику composer, чтобы он искал новые классы в этом новом каталоге, поэтому нам нужно отредактировать composer.json autoload раздел:

"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 многоразовые пакеты.

 2
Author: Manolo, 2018-08-16 08:22:32