検索

ホームページ  >  に質問  >  本文

./foo/bar/utility/baz.php にある Foo\Bar\Baz クラスは、psr-4 自動読み込み標準に準拠していません。縄跳び

composer の updateinstallrequiredump-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 に備えるには何が必要ですか?

P粉052724364P粉052724364437日前667

全員に返信(2)返信します

  • P粉587780103

    P粉5877801032023-10-27 14:50:27

    私の場合、このエラーは、何らかの理由で、アップグレードされた場所 ./foo/bar/baz.php に表示されるファイル ./foo/bar/utility/baz.php のコピーが原因で発生しました。後者を削除した後、誤解を招くエラーはなくなりました。小さい/大文字のパス名を見つめるのに数時間費やしましたが、最初はファイルに問題はありませんでした。

    返事
    0
  • P粉959676410

    P粉9596764102023-10-27 12:42:14

    これはさまざまな理由で発生する可能性があります。

    エラー メッセージ に注意を払うことが重要です。通常、問題の原因を指摘するのは 非常に正確です

    パスケース

    最も一般的な原因は、エラー メッセージが示すように、

    Bar.php パス名のさまざまなコンポーネントの大文字と小文字が完全修飾クラス名の大文字と小文字が一致しないことです。

    foo/bar/Baz.php

    App\Bar\Baz と一致しません。 各パス コンポーネントが、それが所有する名前空間の大文字と小文字が一致するように、アプリケーションまたはパッケージを更新するだけです。

    リーリー

    ファイル名とクラス名または名前空間の違い

    パス名と名前空間を注意深く確認してください。たとえば、クラス (または名前空間) に

    FooBar

    という名前を付ける場合がありますが、ディスク上のパスは「foo-bar」になります。あるいは、何らかの理由で、名前空間がファイルのパス名と正確に一致していない可能性があります。 これにより、通知/警告もトリガーされます。ファイルの名前を変更するか、クラス (または名前空間) の名前を変更する必要があります。

    一般に、クラス名または名前空間名を変更するにはコードをリファクタリングして新しい名前に一致させる必要があるのに対し、パスを変更する場合は何もリファクタリングする必要がないため、パスまたはファイルを変更する方がはるかに簡単です。

    ネストされた名前空間と欠落した宣言

    次のものがあると仮定します:

    リーリー

    およびクラス

    Dummy

    定義 src/Buzz 内: リーリー 上記のメソッドは機能しますが、他のメソッドと同様に通知をスローします。正しいアプローチは次のとおりです:

    リーリー

    影響を受けるクラスだけでなく、このクラスを使用またはインポートする他のファイルも変更する必要があります。 (たとえば、

    use Fizz\Buzz\Buzz\Dummy;

    と宣言します)。

    返事
    0
  • キャンセル返事