composer の update
、install
、require
、dump-autoload
などを実行すると、突然黄色の非推奨通知を受け取り始めました。それは言う:
./foo/bar/utility/baz.php にある FooBarBaz クラスは、psr-4 自動読み込み標準に準拠していません。飛び越える。
Composer 2.0 より前では、通常は次のようになります:
非推奨の通知: ./foo/bar/Baz.php にある FooBarBaz クラスは、psr-4 自動ロード標準に準拠していません。 Composer v2.0 では自動ロードは利用できなくなります。 phar:///usr/local/bin/composer/src/Composer/Autoload/ClassMapGenerator.php:201
で
この通知または警告を受け取るのはなぜですか?この状況から抜け出し、Composer 2.0 に備えるには何が必要ですか?
私の場合、このエラーは、何らかの理由で、アップグレードされた場所 ./foo/bar/baz.php に表示されるファイル ./foo/bar/utility/baz.php のコピーが原因で発生しました。後者を削除した後、誤解を招くエラーはなくなりました。小さい/大文字のパス名を見つめるのに数時間費やしましたが、最初はファイルに問題はありませんでした。
これはさまざまな理由で発生する可能性があります。
エラー メッセージ に注意を払うことが重要です。通常、問題の原因を指摘するのは 非常に正確です 。
パスケースBar.php
foo/bar/Baz.phpパス名のさまざまなコンポーネントの大文字と小文字が完全修飾クラス名の大文字と小文字が一致しないことです。
は
各パス コンポーネントが、それが所有する名前空間の大文字と小文字が一致するように、アプリケーションまたはパッケージを更新するだけです。
リーリーApp\Bar\Baz
と一致しません。ファイル名とクラス名または名前空間の違い
パス名と名前空間を注意深く確認してください。たとえば、クラス (または名前空間) に
FooBarという名前を付ける場合がありますが、ディスク上のパスは「foo-bar」になります。あるいは、何らかの理由で、名前空間がファイルのパス名と正確に一致していない可能性があります。
これにより、通知/警告もトリガーされます。ファイルの名前を変更するか、クラス (または名前空間) の名前を変更する必要があります。
一般に、クラス名または名前空間名を変更するにはコードをリファクタリングして新しい名前に一致させる必要があるのに対し、パスを変更する場合は何もリファクタリングする必要がないため、パスまたはファイルを変更する方がはるかに簡単です。
ネストされた名前空間と欠落した宣言
次のものがあると仮定します:
リーリーおよびクラス
Dummy、
定義 src/Buzz 内:
リーリーリーリー
上記のメソッドは機能しますが、他のメソッドと同様に通知をスローします。正しいアプローチは次のとおりです:影響を受けるクラスだけでなく、このクラスを使用またはインポートする他のファイルも変更する必要があります。 (たとえば、
use Fizz\Buzz\Buzz\Dummy;と宣言します)。