Symfony3 - 创建基于供应商的捆绑包

时间:2016-09-15 11:39:07

标签: php composer-php bundle symfony vendor

我们想创建一个可以通过composer / packagist部署的包供其他人使用。它将包装MessageBird所有者创建的逻辑。基本上是一种服务,它将通过ourvendor.messagebird.messaging确实通过容器调用。

由于它是一种捆绑包(根据Sf3的文档),我们在遵循文档时创建了一个捆绑包: https://github.com/rs/cors

作为目录/src,我们改为使用/vendor。那是一切都出错的时候。我们的命名空间无法定位,加载,甚至当我们手动将其添加到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/"添加到root composer.json中的“autoload / psr-4”指令
  5. 我们运行composer dumpautoload && bin/console cache:clear -e dev导致错误。
  6. 我们运行composer -o update检查所有依赖项并相应更新,包括自动生成的自动加载文件
  7. 奇怪的是,我们不得不将Bundle添加到AppKernel.php类并再次清理缓存。
  8. 毕竟这有用但文档说没有关于开发第三方供应商包的事情。 http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_bundle.html

    这么长的故事简短,我们是以错误的方式去做什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

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