Symfony3 - создание пакета на основе поставщика
Мы хотели бы создать пакет, который может быть развернут с помощью composer/packagist для других пользователей. Это обернет логику, созданную владельцами MessageBird. В основном это своего рода услуга, которая действительно будет вызываться с контейнером через ourvendor.messagebird.messaging
.
Поскольку это тип пакета (в соответствии с документами Sf3), мы создали пакет, следуя документации: http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_bundle.html
В качестве каталог /src
вместо этого мы использовали /vendor
. Вот тогда-то все и пошло не так. Наше пространство имен не могло быть найдено, загружено или даже когда мы вручную добавили его в классы автоматической загрузки Composer, оно все равно потерпело неудачу.
Вопрос в том, какова наилучшая практика для этого? Мы заставили его работать прямо сейчас, и то, что мы сделали, было следующим:
- Мы создали пакет со следующим cmd:
bin/console generate:bundle --shared --namespace=OurVendor/MessageBird/MessageBirdBundle --bundle-name=MessageBirdBundle --format=yml
- Мы переместили каталог
/src/OurVendor
в/vendor/OurVendor
как единственный способ получить идеальное поколение - использовать папку по умолчанию/src
. - Мы вручную обновили AppKernel.php
- Мы провели некоторую отладку с пространствами имен для Composer, но в итоге мы добавили
"OurVendor\\":"vendor/"
в директиву "autoload/psr-4" в корневом файле composer.json - Мы запустили
composer dumpautoload && bin/console cache:clear -e dev
, что привело к ошибке. - Мы запустили
composer -o update
, который проверил все зависимости и соответствующим образом обновил, включая автоматически созданные файлы автоматической загрузки - Как ни странно, нам пришлось добавить Связывайтесь с классом
AppKernel.php
и снова очищайте кэш.
После всего этого это сработало, но в документации не говорилось ничего подобного о разработке пакета сторонних поставщиков. http://symfony.com/doc/current/bundles/best_practices.html
Короче говоря, мы пошли по неверному пути или как?
1 answers
/vendor
каталог управляется композитором. Не копируйте/не перемещайте туда ничего. Даже не редактируйте там ничего, если не понимаете всех последствий.
Когда вы создаете общий пакет, вам нужно отправить его в VCS по вашему выбору и добавить его в качестве зависимости в composer.json
проекта, который его использует.
Когда вы запустите composer update
, он извлечет ваш пакет в каталог /vendor
и сгенерирует правильный файл автоматической загрузки.
Пожалуйста, прочитайте больше как использовать частные репозитории с композитором.