La classe Foo\Bar\Baz située dans ./foo/bar/utility/baz.php n'est pas conforme aux normes de chargement automatique psr-4. corde à sauter
P粉052724364
P粉052724364 2023-10-26 16:51:34
0
2
457

Exécution de composer'supdateinstallrequiredump-autoloadetc ; j'ai soudainement commencé à recevoir des notifications de dépréciation jaunes qui disaient :

La classe FooBarBaz située dans ./foo/bar/utility/baz.php n'est pas conforme aux normes de chargement automatique psr-4. franchir.

Avant Composer 2.0, vous obteniez généralement :

Avis de dépréciation : la classe FooBarBaz située dans ./foo/bar/Baz.php n'est pas conforme aux normes de chargement automatique psr-4. Le chargement automatique ne sera plus disponible dans Composer v2.0. sur phar:///usr/local/bin/composer/src/Composer/Autoload/ClassMapGenerator.php:201

Pourquoi est-ce que je reçois cette notification ou cet avertissement ? De quoi ai-je besoin pour en sortir et être prêt pour Composer 2.0 ?

P粉052724364
P粉052724364

répondre à tous (2)
P粉587780103

Dans mon cas, cette erreur a été causée par une copie du fichier ./foo/bar/utility/baz.php apparaissant à l'emplacement mis à niveau ./foo/bar/baz.php pour une raison quelconque. Après avoir supprimé cette dernière, l’erreur trompeuse a disparu. Même si j'ai passé plusieurs heures à regarder des chemins d'accès en petites/majuscules, je n'ai initialement eu aucun problème avec le fichier.

    P粉959676410

    Cela peut arriver pour diverses raisons.

    Il est importantde prêter attention au message d'erreur, il est généralementtrès précispour identifier la source du problème.

    Cas de chemin

    La cause la plus courante est, comme l'indique le message d'erreur,Bar.phpLa casse des différents composants du nom de chemin ne correspond pas à la casse du nom de classe complet ;

    Aucune correspondance.foo/bar/Baz.phpAppBarBaz

    Mettez simplement à jour votre application ou package afin que chaque composant de chemin corresponde à la casse de l'espace de noms qu'il possède :

    Foo\Bar\Baz.php
    Différence entre le nom de fichier et le nom de classe ou l'espace de noms

    Vérifiez très attentivement les noms de chemin par rapport aux espaces de noms. Parfois, vous nommez une classe (ou un espace de noms)

    mais son chemin sur le disque est "foo-bar", par exemple. Ou simplement que, pour une raison quelconque, votre espace de noms ne correspond pas exactement au chemin d'accès du fichier.FooBar

    Cela déclenchera également des notifications/avertissements. Vous devez renommer le fichier ou renommer la classe (ou l'espace de noms).

    En général, il est beaucoup plus facile de modifier un chemin ou un fichier, car changer le nom d'une classe ou d'un espace de noms nécessite de refactoriser le code pour qu'il corresponde au nouveau nom, tandis que changer un chemin ne nécessite rien de refactoriser.

    Espaces de noms imbriqués et déclarations manquantes

    Supposons que vous ayez :

    "autoload": { "psr-4": { "Fizz\Buzz\": "src/" } },
    Et la classe Dummy, définie dans

    src/Buzz:Dummy,在内部定义src/Buzz

    // src/Buzz/Dummy.php namespace Fizz\Buzz class Dummy {}
    La méthode ci-dessus fonctionnera, mais enverra des notifications comme les autres méthodes. La bonne approche est :

    // src/Buzz/Dummy.php namespace Fizz\Buzz\Buzz class Dummy {}
    Vous devrez apporter des modifications non seulement à la classe concernée, mais également à tout autre fichier qui utilise ou importe cette classe. (Par exemple, déclarez maintenant

    ).use FizzBuzzBuzzDummy;

      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!