2016-09-15 3 views
2

Мы хотели бы создать пакет, который может быть использован с помощью композитора/пакета для других пользователей. Он обернет логику, созданную владельцами MessageBird. В основном это своего рода сервис, который действительно будет вызываться с помощью контейнера через ourvendor.messagebird.messaging.Symfony3 - создание пакета на базе поставщика

Поскольку это тип расслоения (согласно документации по SF3), мы создали пакет во время следующей документации: http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_bundle.html

В директории /src мы использовали /vendor вместо этого. Вот тогда все пошло не так. Наше пространство имен не может быть расположено, загружено или даже когда мы вручную добавили его в классы автозагрузки Composer, он все равно не удался.

Вопрос в том, что является лучшей практикой для этого? Мы получили его работать прямо сейчас, и то, что мы делали, было следующее:

  1. Мы создали расслоение остроумие следующий ЦМД:
    • bin/console generate:bundle --shared --namespace=OurVendor/MessageBird/MessageBirdBundle --bundle-name=MessageBirdBundle --format=yml
  2. Мы переехали каталог /src/OurVendor в /vendor/OurVendor как единственный способ получить идеальное поколение - использовать папку по умолчанию /src.
  3. Мы вручную обновили AppKernel.php
  4. Мы сделали некоторую отладку с пространствами имен для Composer, но в конце концов мы добавили "OurVendor\\":"vendor/" в «автозагрузку/PSR-4» директивы в корневой composer.json
  5. Мы бежали composer dumpautoload && bin/console cache:clear -e dev, что привело к ошибка.
  6. Мы побежали composer -o update, который проверил все зависимости и обновленный соответственно, в том числе и автоматически сгенерированных файлов автозагрузки
  7. Как ни странно, мы должны были добавить Bundle к AppKernel.php класса и снова очищаются кэш.

После всего этого это сработало, но в документации не было сказано о разработке пакета сторонних поставщиков. http://symfony.com/doc/current/bundles/best_practices.html

Столь длинная история, не так ли?

+1

, который будет доступен в каталоге поставщика, должен быть размещен и зарегистрирован в [Packagist] (https://packagist.org/). Сделайте пакет в вашем каталоге 'src', поместите его на packagist, тогда вы можете' композитор 'требовать его где угодно. Но имейте в виду, что это будет публично. Это точка поставщика – DevDonkey

+0

Спасибо @DevDonkey!Понял. – ReSpawN

ответ

1

/vendor каталог находится под управлением композитора. Не копируйте и не перемещайте что-либо там. Даже ничего не редактируйте там, если вы не понимаете все последствия.

Когда вы создаете общий пакет, вам нужно нажать его в VCS по вашему выбору и добавить его как зависимость в composer.json проекта, который его использует.

Когда вы запустите composer update, он проверит ваш комплект в каталоге /vendor и произведет правильный файл автозагрузки.

Подробнее how to use private repositories with composer.

+0

Ты совершенно прав! Спасибо за помощь и разъяснение. – ReSpawN