PHP Composer 与 Git 子模块和 Symfony2 混合

标签 php git symfony composer-php

我这里有一个项目,它是一个大型 Symfony2 应用程序,我希望将 git 子模块引入到我们在这里内部构建的组件中。这里的问题是每个组件还需要 composer 包才能正常运行,现在我有 symfony2 应用程序的 composer 包和组件所需的 composer 包,我不确定如何在这里处理/设置这些依赖项。

目前,我正在为我们添加的每个组件(git 子模块)手动运行“composer install”,这意味着每个组件都有自己的“vendor”文件夹,这远非理想,因此我将使用 Stack 来获得关于如何使这些“symfony Composer 依赖项”和“组件 Composer 依赖项”易于维护的好建议。

我不需要确保 symfony2 应用程序的 deps 版本与组件 deps 同步,我只需要使其简单且可维护,而不必对我们设置的每个 git 子模块运行“composer update”。

谢谢!

编辑

我现在正在使用 composer 的 repositories 键来定义我公司私有(private) github 存储库的 URL。我能够引入一个单一的私有(private) repo ,我们称之为 Repo A。但是,当我添加 Repo B 并使 Repo A require Repo B 时,它无法正确解析。

Repo A(用户报告组件)的 composer.json:https://gist.github.com/dragoonis/6ea92e062762c516baea

Repo B(数据库组件)的 Composer.json:https://gist.github.com/dragoonis/e54b47b75a79b82ebaea

出现以下错误消息:https://gist.github.com/dragoonis/d79cd2c2dd5cc50bcd2a

opinurate/database-component 包确实存在,因为它是 respositories 键中定义的 repos 之一。

结论

这里的最终解决方案是使用 Satis 来设置您自己的私有(private)版本的“packagist”,它将与 packagist 一起工作。

我在“http://packages.mydomain.com”设置了 Satis ' 并在我的主要应用程序 composer.json 文件中向该 URL 添加了一个 'repositories' 键。现在,在评估包名称时,它也会使用您自己的自定义 satis 服务器为您提供 git URL。

最佳答案

我会说你最好的选择是通过 composer 添加这些组件而不是 git 子模块。它使编码和维护更加复杂,但它确保您的应用程序了解所有实际依赖项。

如果您不希望它们公开并且想要一种更简单的方法来处理它们,那么我会在本地推出一个 Satis 部署并在那里注册它们,将该 satis 存储库添加到您的 composer.json。

Satis 是 Packagist 的一个简单版本,只要安装它的服务器和运行 composer install 的机器可以访问您的私有(private)存储库,其他任何东西都看不到它们。 Composer 网站上有文档:https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md

然后您将设置 packages.yourcompany.com 并将其添加到您的 composer.json 作为包的备用来源。一切都保持私密。

回复编辑: 发生这种情况是因为 composer compartimentalizes,这意味着“存储库”只为您的项目的 composer.json 所知,而 Repo A 中的那个不知道,因此找不到它。您必须在该库中重新定义存储库。即使使用 Satis,也必须将“satis”地址添加到所有涉及的 composer.json 文件中。

将您在应用程序中添加的“存储库”内容添加到 Repo A 和 B 中的 composer.json 中,它应该可以解决所有问题。

关于PHP Composer 与 Git 子模块和 Symfony2 混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21850084/

相关文章:

php - 在 Symfony 2 中使用注释时生成 url 的路由名称

php - 如何在 XAMPP 服务器上使用 php 将 MySQL 数据库连接到 html 页面?

php - 将 PHP mcrypt 与 Rijndael/AES 结合使用

iphone - 如何在单个存储库中维护多个iOS应用程序?

linux - GITFLOW Linux 安装问题

php - Symfony UniqueEntity 在更新现有实体时显示错误

php - PayPal IPN 沙箱返回 HTTP 302

javascript - 现在我已将内容发布到 PHP 脚本中,如何获取它?

git - 使用适用于 Windows 的 GitHub 同步分支并与项目保持同步

php - Symfony 分析器 : show response content?