【发布时间】:2016-09-15 11:39:07
【问题描述】:
我们想创建一个可以通过 composer/packagist 部署的包供其他人使用。它将包装 MessageBird 的所有者创建的逻辑。基本上是一种服务,确实会通过ourvendor.messagebird.messaging 与容器一起调用。
由于它是一种捆绑包(根据 Sf3 的文档),我们在遵循文档的同时创建了一个捆绑包: http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_bundle.html
我们使用/vendor 作为目录/src。就在那时,一切都出错了。我们的命名空间无法定位、加载,甚至当我们手动将其添加到 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/"添加到根 composer.json 中的“autoload/psr-4”指令中 - 我们运行了
composer dumpautoload && bin/console cache:clear -e dev,结果出现了错误。 - 我们运行了
composer -o update,它检查了所有依赖项并进行了相应更新,包括自动生成的自动加载文件 - 奇怪的是,我们不得不将 Bundle 添加到
AppKernel.php类并再次清理缓存。
毕竟它起作用了,但文档没有提到开发 3rd 第三方供应商捆绑包。 http://symfony.com/doc/current/bundles/best_practices.html
长话短说,我们是走错了路还是怎么了?
【问题讨论】:
-
要在供应商目录中可用,它必须由Packagist 托管和注册。在您的
src目录中制作捆绑包,将其放在packagist 上,然后您可以在任何您喜欢的地方composer require它。但请注意,它将是公开的。这就是供应商的重点 -
感谢@DevDonkey!明白了。
标签: php composer-php bundle symfony vendor