所有这一切都基于您实际上在谈论包而不是类(在示例中提到但在问题中未要求)的假设。
如果你有Composer
对象,你可以从对象中获取供应商目录的路径Config
:
$vendorPath = $composer->getConfig()->get('vendor-dir');
$vendorPath
现在应该包含/home/me/public_html/vendor/
.
从那里构建路径的其余部分应该不会太难,因为您已经有了包名称。
如果这感觉太不稳定或者您不想编写逻辑,还有另一种解决方案。您可以获取所有包,迭代直到找到正确的包并从中获取路径:
$repositoryManager = $composer->getRepositoryManager();
$installationManager = $composer->getInstallationManager();
$localRepository = $repositoryManager->getLocalRepository();
$packages = $localRepository->getPackages();
foreach ($packages as $package) {
if ($package->getName() === 'willdurand/geocoder') {
$installPath = $installationManager->getInstallPath($package);
break;
}
}
$installPath
现在应该包含/home/me/public_html/vendor/willdurand/geocoder