【问题标题】:Symfony3 - creating a vendor-based bundleSymfony3 - 创建基于供应商的捆绑包
【发布时间】: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 的自动加载类时,它仍然失败。

问题是,解决此问题的最佳做法是什么?我们现在让它工作,我们做了以下事情:

  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/" 添加到根 composer.json 中的“autoload/psr-4”指令中
  5. 我们运行了composer dumpautoload && bin/console cache:clear -e dev,结果出现了错误。
  6. 我们运行了composer -o update,它检查了所有依赖项并进行了相应更新,包括自动生成的自动加载文件
  7. 奇怪的是,我们不得不将 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


【解决方案1】:

/vendor 目录由 composer 管理。不要在那里复制/移动任何东西。甚至不要在那里编辑任何内容,除非您了解所有后果。

当您创建共享包时,您需要将其推送到您选择的 VCS,并将其作为依赖项添加到使用它的项目的 composer.json 中。

当您运行composer update 时,它会将您的包检出到/vendor 目录并生成正确的自动加载文件。

请阅读更多how to use private repositories with composer

【讨论】:

  • 你完全正确!感谢您的帮助和澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 2017-08-12
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
相关资源
最近更新 更多