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



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

当composer将bar添加到foo应用程序时,bar需要访问fooapp的MySQL数据库。数据库凭据存储在foo应用程序的配置目录中。

我的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开发应用程序的根目录下放置一个配置/目录,并且bar需要能够访问它。如果bar是另一个composer项目的一部分(在这种情况下是foo),我需要巴尔知道要转到foo的根目录来获取配置/目录,不要在的根目录中查找。

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

如果一个真实世界的例子会有所帮助。。。

我正在将这个foo应用程序部署到Amazon OpsWorks。OpsWorks在部署的应用程序的根目录中放置一个OpsWorks.php文件。我需要我的子模块(在上面的例子中是bar)来知道在哪里访问composer项目根目录下的opsworks.php文件。我需要说明的事实是,composer可能被设置为不将bar放在/vender/中,但可能有不同的文件结构设置。

换句话说,我想问Composer应用程序的根在哪里。

您可以使用composer自己的ComposerFactory::getComposerFile();来访问项目根目录:

$projectRootPath = dirname(ComposerFactory::getComposerFile());

对于您的案例,您可以通过以下方式访问config/目录:

$configPath = $projectRootPath . '/config'

不要忘记将composer添加到您的依赖项中,以便ComposerFactory::class可用:

$ composer require composer/composer

如果https://getcomposer.org/doc/01-basic-usage.md

自动加载部分描述了您似乎要查找的行为。

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

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

相关内容

  • 没有找到相关文章

最新更新