Symfony3 - 创建基于供应商的包
Symfony3 - creating a vendor-based bundle
我们想创建一个可以通过 composer/packagist 部署的包供其他人使用。它将包装由 MessageBird 的所有者创建的逻辑。基本上是一种服务,确实会通过 ourvendor.messagebird.messaging
.
与容器一起调用
由于它是一种捆绑包(根据 Sf3 的文档),我们在遵循文档的同时创建了一个捆绑包:
http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_bundle.html
我们使用 /vendor
作为目录 /src
。就在那时,一切都出了问题。我们的命名空间无法定位、加载,甚至当我们手动将其添加到 Composer 的自动加载 classes 时,它仍然失败。
问题是,解决此问题的最佳做法是什么?我们现在让它工作了,我们做了以下事情:
- 我们使用以下命令创建了一个包:
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
检查所有依赖项并相应更新,包括自动生成的自动加载文件
- St运行我们不得不将 Bundle 添加到
AppKernel.php
class 并再次清理缓存。
在所有这一切之后,它起作用了,但文档没有说开发第 3 方供应商捆绑包。
http://symfony.com/doc/current/bundles/best_practices.html
长话短说,我们是走错了路还是怎么了?
/vendor
目录由 composer 管理。不要 copy/move 那里有任何东西。除非您了解所有后果,否则甚至不要在那里编辑任何内容。
创建共享包时,需要将其推送到您选择的 VCS,并将其作为依赖项添加到使用它的项目的 composer.json
中。
当您 运行 composer update
时,它会将您的包检出到 /vendor
目录并生成正确的自动加载文件。
我们想创建一个可以通过 composer/packagist 部署的包供其他人使用。它将包装由 MessageBird 的所有者创建的逻辑。基本上是一种服务,确实会通过 ourvendor.messagebird.messaging
.
由于它是一种捆绑包(根据 Sf3 的文档),我们在遵循文档的同时创建了一个捆绑包: http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_bundle.html
我们使用 /vendor
作为目录 /src
。就在那时,一切都出了问题。我们的命名空间无法定位、加载,甚至当我们手动将其添加到 Composer 的自动加载 classes 时,它仍然失败。
问题是,解决此问题的最佳做法是什么?我们现在让它工作了,我们做了以下事情:
- 我们使用以下命令创建了一个包:
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
检查所有依赖项并相应更新,包括自动生成的自动加载文件 - St运行我们不得不将 Bundle 添加到
AppKernel.php
class 并再次清理缓存。
在所有这一切之后,它起作用了,但文档没有说开发第 3 方供应商捆绑包。 http://symfony.com/doc/current/bundles/best_practices.html
长话短说,我们是走错了路还是怎么了?
/vendor
目录由 composer 管理。不要 copy/move 那里有任何东西。除非您了解所有后果,否则甚至不要在那里编辑任何内容。
创建共享包时,需要将其推送到您选择的 VCS,并将其作为依赖项添加到使用它的项目的 composer.json
中。
当您 运行 composer update
时,它会将您的包检出到 /vendor
目录并生成正确的自动加载文件。