11

composerパッケージのファイルシステムパスを取得するにはどうすればよいですか?

composer.json の例:

{

    "require" : {
        "codeception/codeception" : "@stable",
        "willdurand/geocoder": "*"
    }
}

例: $composer->getPath("\Geocoder\HttpAdapter\HttpAdapterInterface");

次のように返します。 "/home/me/public_html/vendor/willdurand/geocoder/src/Geocoder/HttpAdapter"

4

4 に答える 4

12

これはすべて、実際にはクラスではなくパッケージについて話しているという前提に基づいています (例では言及されていますが、質問では求められていません)。

オブジェクトがある場合は、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

于 2015-01-11T20:04:51.317 に答える
-1

composer は急速に変化しているため、次の方法が正しいかどうかはわかりません。

このコマンドを実行すると:

php /path/to/composer.phar dump-autoload -o

このファイルにクラスマップ配列を作成します

vender/composer/autoload_classmap.php

この形式で「クラス名」=>ファイルパス。

したがって、特定のクラスのファイルパスを見つけるのは簡単です。プロジェクトのルート フォルダーにスクリプトを作成する場合は、次の操作を実行できます。

$classmap = require('vender/composer/autoload_classmap.php');
$filepath = $classmap[$classname]?: null;
于 2013-03-30T10:00:18.210 に答える