我在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应用程序的根目录。
答案 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的根,只加载你需要的项目。