Composer installでライブラリが上手く読み込めない場合の対処法
こんにちは。
ニシザワです。
PHPのpackagistでComposerを使っている方が多いと思います。
ただ、必要なライブラリをComposerでインストールしても、たまにClassが見つからないなんて出てきて、困ってしまうことがあります。
今回は、Composer installでライブラリを上手く読み込めない場合の対処法を書きます。
ここの、"type": "zip",に書いてあるURLが実ファイルの取得場所なので そこへブラウザで直接アクセスして、ライブラリを取得する。
それをそのまま、vendorに入れればOK
ちょっと強引なやり方だが、確実なので試してみてください。
ニシザワです。
PHPのpackagistでComposerを使っている方が多いと思います。
ただ、必要なライブラリをComposerでインストールしても、たまにClassが見つからないなんて出てきて、困ってしまうことがあります。
今回は、Composer installでライブラリを上手く読み込めない場合の対処法を書きます。
classを再読込してみる
composer dump-autoload
classはautoload.phpで管理されているので、こちらの更新が必要かもしれません。
キャッシュを消して再インストールしてみる
rm -Rf vendor/
rm composer.lock
composer clear-cache
composer install
composerは同じバージョンのライブラリはcacheされてしまうので、何度読み込み直してもcacheが残っていると上手くいかないことが多いです。
それでも治らない場合の最終手段
composer.lockファイルに該当のパッケージが書いてあるのでそれを探しに行く。 {
"name": "symfony/http-foundation",
"version": "v2.7.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "444e5d19d61447f6f829c90a32aae73773f2777f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/444e5d19d61447f6f829c90a32aae73773f2777f",
"reference": "444e5d19d61447f6f829c90a32aae73773f2777f",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
"symfony/polyfill-mbstring": "~1.1"
},
"require-dev": {
"symfony/expression-language": "~2.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.7-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\HttpFoundation\\": ""
},
"classmap": [
"Resources/stubs"
],
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2016-11-13 17:41:36"
},
例えばsymfony/http-foundationならこんな感じで書いてある。ここの、"type": "zip",に書いてあるURLが実ファイルの取得場所なので そこへブラウザで直接アクセスして、ライブラリを取得する。
それをそのまま、vendorに入れればOK
ちょっと強引なやり方だが、確実なので試してみてください。