如何使用Composer确定项目的根目录

时间:2014-10-22 17:50:22

标签: php composer-php

我在PHP中创建了一个应用程序(" foo"),它使用composer来实现其依赖性。一个依赖项是我们创建的另一个项目(" bar")。

bar 由作曲家添加到 foo 应用程序时, bar 需要访问 foo的MySQL数据库应用数据库凭据存储在 foo 应用程序中的config目录中。

foo 的文件结构看起来像这样:

app/ # files for the foo app config/ # config information to access MySQL vendor/ # composer-managed files, including our bar app composer.json # information to load bar into the vendor/ directory

当我自己开发 bar 应用程序时,我需要能够在我的 bar 开发应用程序的根目录下放置一个config /目录并且 bar 需要能够访问它。如果 bar 是另一个作曲家项目( foo ,在这种情况下)的一部分,我需要 bar 知道转到 foo 用于config /目录,而不是查看 bar 的根目录。

bar 如何确定config /的正确目录?我想我需要找到作曲家安装的根目录,但我不知道该怎么做。

如果现实世界的例子有帮助......

我将此 foo 应用程序部署到Amazon OpsWorks。 OpsWorks将opsworks.php文件放在已部署应用程序的根目录中。我需要我的子模块(上面示例中的 bar )知道在作曲家项目的根目录下访问opsworks.php文件的位置。我需要说明这样一个事实,即编写器可能被设置为不在/ vendor /中放置 bar ,但可能有不同的文件结构设置。

换句话说,我想问一下Composer应用程序的根目录。

2 个答案:

答案 0 :(得分:1)

您可以使用作曲家自己的\Composer\Factory::getComposerFile();来访问项目根目录:

$projectRootPath = dirname(\Composer\Factory::getComposerFile());

根据您的情况,您可以通过以下方式访问config/目录:

$configPath = $projectRootPath . '/config'

不要忘记将composer添加到依赖项中,以使\Composer\Factory::class可用:

$ composer require composer/composer

答案 1 :(得分:0)

如果你看一下 https://getcomposer.org/doc/01-basic-usage.md

autoload部分描述了您正在寻找的行为。

$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);

你可以用这种方式定义foo的根和bar的根,只加载你需要的项目。