我们想创建一个可以通过composer / packagist部署的包供其他人使用。它将包装MessageBird所有者创建的逻辑。基本上是一种服务,它将通过ourvendor.messagebird.messaging
确实通过容器调用。
由于它是一种捆绑包(根据Sf3的文档),我们在遵循文档时创建了一个捆绑包: https://github.com/rs/cors
作为目录/src
,我们改为使用/vendor
。那是一切都出错的时候。我们的命名空间无法定位,加载,甚至当我们手动将其添加到Composer的自动加载类时,它都失败了。
问题是,最好的做法是什么?我们现在就开始工作,我们做了以下工作:
bin/console generate:bundle --shared --namespace=OurVendor/MessageBird/MessageBirdBundle --bundle-name=MessageBirdBundle --format=yml
/src/OurVendor
目录移至/vendor/OurVendor
,因为获得完美代的唯一方法是使用默认的/src
文件夹。"OurVendor\\":"vendor/"
添加到root composer.json中的“autoload / psr-4”指令composer dumpautoload && bin/console cache:clear -e dev
导致错误。composer -o update
检查所有依赖项并相应更新,包括自动生成的自动加载文件AppKernel.php
类并再次清理缓存。毕竟这有用但文档说没有关于开发第三方供应商包的事情。 http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_bundle.html
这么长的故事简短,我们是以错误的方式去做什么?
答案 0 :(得分:1)
/vendor
目录由composer管理。不要在那里复制/移动任何东西。除非你了解所有后果,否则不要在那里编辑任何东西。
创建共享包时,需要将其推送到您选择的VCS,并将其作为依赖项添加到使用它的项目的composer.json
中。
当您运行composer update
时,它会将您的捆绑包签出到/vendor
目录并生成正确的自动加载文件。