Symfony3 - создание пакета на основе поставщика


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

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

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

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

  1. Мы создали пакет со следующим cmd:
    • 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/" в директиву "autoload/psr-4" в корневом файле composer.json
  5. Мы запустили composer dumpautoload && bin/console cache:clear -e dev, что привело к ошибке.
  6. Мы запустили composer -o update, который проверил все зависимости и соответствующим образом обновил, включая автоматически созданные файлы автоматической загрузки
  7. Как ни странно, нам пришлось добавить Связывайтесь с классом AppKernel.php и снова очищайте кэш.

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

Короче говоря, мы пошли по неверному пути или как?

Author: ReSpawN, 2016-09-15

1 answers

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

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

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

Пожалуйста, прочитайте больше как использовать частные репозитории с композитором.

 1
Author: Alex Blex, 2016-09-15 11:55:00