suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Die Foo\Bar\Baz-Klasse unter ./foo/bar/utility/baz.php entspricht nicht den psr-4-Standards für das automatische Laden. Springseil

Beim Ausführen von Composer's updateinstallrequiredump-autoloadusw. bekam ich plötzlich gelbe Benachrichtigungen über veraltete Funktionen mit der Aufschrift:

Die FooBarBaz-Klasse in ./foo/bar/utility/baz.php entspricht nicht den psr-4-Standards für das automatische Laden. über etwas springen.

Vor Composer 2.0 erhielten Sie normalerweise Folgendes:

Veraltungshinweis: Die FooBarBaz-Klasse unter ./foo/bar/Baz.php entspricht nicht den psr-4-Standards für das automatische Laden. Das automatische Laden ist in Composer v2.0 nicht mehr verfügbar. unter phar:///usr/local/bin/composer/src/Composer/Autoload/ClassMapGenerator.php:201

Warum erhalte ich diese Benachrichtigung oder Warnung? Was brauche ich, um da rauszukommen und für Composer 2.0 bereit zu sein?

P粉052724364P粉052724364414 Tage vor646

Antworte allen(2)Ich werde antworten

  • P粉587780103

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

    就我而言,此错误是由文件 ./foo/bar/utility/baz.php 副本出现在升级位置 ./foo/bar/baz.php 引起的,无论出于何种原因。删除后者后,误导性错误就消失了。尽管我花了几个小时盯着小/大写路径名,但该文件最初没有任何问题。

    Antwort
    0
  • P粉959676410

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

    发生这种情况的原因有多种。

    重要的是注意错误消息,它通常非常准确指出问题的根源。

    路径案例

    最常见的原因是,如错误消息所示,Bar.php 路径名的不同组成部分的大小写与完全限定类的大小写不匹配姓名;

    foo/bar/Baz.phpApp\Bar\Baz 不匹配。

    只需更新您的应用程序或包,以便每个路径组件与其所拥有的命名空间的大小写相匹配:

    Foo\Bar\Baz.php

    文件名和类名或命名空间差异

    非常仔细地对照命名空间检查路径名。有时,您将类(或名称空间)命名为 FooBar,但其在磁盘上的路径是“foo-bar”,例如。或者只是出于任何原因,您的命名空间与文件的路径名不完全匹配。

    这也会触发通知/警告。您需要重命名文件或重命名类(或命名空间)。

    通常,更改路径或文件要容易得多,因为更改类或命名空间名称需要重构代码以匹配新名称,而更改路径不需要重构任何内容。

    嵌套命名空间和缺少声明

    假设您有:

    "autoload": {
            "psr-4": {
                "Fizz\\Buzz\\": "src/"
            }
        },
    

    以及类Dummy,在内部定义src/Buzz

    // src/Buzz/Dummy.php
    namespace Fizz\Buzz
    
    class Dummy {}

    上面的方法可以工作,但是会像其他方法一样抛出通知。正确的做法是:

    // src/Buzz/Dummy.php
    namespace Fizz\Buzz\Buzz
    
    class Dummy {}

    您不仅需要对受影响的类进行更改,还需要对使用或导入此类的任何其他文件进行更改。 (例如,现在声明 use Fizz\Buzz\Buzz\Dummy;)。

    Antwort
    0
  • StornierenAntwort