我有一个用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的根,并且只加载您需要的项。