Php Composer:两个供应商目录(其中一个是符号链接的)-共享库自动加载

Php Composer:两个供应商目录(其中一个是符号链接的)-共享库自动加载,php,symfony,composer-php,autoloader,Php,Symfony,Composer Php,Autoloader,我需要在Symfony 2应用程序中自动加载两个供应商目录。我将首先解释我为什么需要这个,以使一切更加清楚: 我有许多用Symfony 2编写的小项目/网站,所有Symfony都链接到一个提供域模型等的共享库 应用程序结构中的一个项目: |- app |- library -> ../library (symlink) |- src |- vendor |- web 图书馆项目有许多重要的供应商,所以我不能在每个项目供应商目录中安装图书馆的供应商。这将占用大量磁盘空间 我是否需要合并两个

我需要在Symfony 2应用程序中自动加载两个供应商目录。我将首先解释我为什么需要这个,以使一切更加清楚:

我有许多用Symfony 2编写的小项目/网站,所有Symfony都链接到一个提供域模型等的共享库

应用程序结构中的一个项目:

|- app
|- library -> ../library (symlink)
|- src
|- vendor
|- web
图书馆项目有许多重要的供应商,所以我不能在每个项目供应商目录中安装图书馆的供应商。这将占用大量磁盘空间

我是否需要合并两个供应商[root]/vendors和[root]/library/vendors,以便它们都自动加载但不复制?如果我这样做,我想我的composer.lock会失败,因为供应商位于不同的目录中

作曲家会怎么做?任何提示,我都没有主意了


谢谢

Symfony 2 app/autoload.php文件可用于添加要从中加载的其他目录

/**
 * @var $loader ClassLoader
 */
// The Composer generated autoloader
$loader = require __DIR__.'/../vendor/autoload.php';

// An additional directory to load from
$loader->add('Cerad',   __DIR__  . '/../../cerad2/src');

// Majic
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

return $loader;

但是,我如何使这两个供应商保持同步,使[root]/vendors和[root]/library/vendors中的供应商保持同步,使它们不包含复制的供应商。换句话说,库中的自动加载器和main都需要知道这两个依赖项。我已经知道如何让它们自动加载,但是当符号链接供应商时,更多的版本可能会发生冲突等。我想我回答了错误的问题。不要使用符号链接,也不要担心磁盘空间问题,除非它真的成为一个问题。占用太多的磁盘空间现在不应该成为争论的话题,除非你能告诉我们所有这些依赖项实际使用了多少磁盘空间,你节省了。@Sven好吧,磁盘空间是一回事,也许不是那么大的问题。但重要的是,当你复制所有内容时,你需要在不同的地方更新你的供应商。如果你把它符号化,你就把它都放在一个地方了。在我看来,这是最好的解决方案。我已经需要两个自动加载器了,这很好用。但是仍然会有差异,因为composer.lock文件不知道符号链接。composer的关键功能是完全允许在您维护的每个应用程序中具有不同版本的依赖项。这样,您就可以自由地一次更新一个应用程序,并处理可能出现的集成问题。集中管理一个版本是没有人喜欢PEAR的原因之一。它迫使您同时更新所有内容。而且,通过使用一个未被称为应用程序依赖项的集中管理库,您不知道正在使用哪些部分,也无法将应用程序放在其他位置轻松阅读:另一台服务器。@Sven我认为您是对的,我正在努力实现这两个方面的最佳效果。但事实上,独立管理的依赖关系似乎更好。此外,供应商仅共享库就需要380MB。相当多。谢谢你让我走上了正确的道路: