当前位置: 首页 > 知识库问答 >
问题:

位于./Foo/Bar/utility/Baz.php中的类Foo\Bar\Baz不符合psr-4自动加载标准。跳过

郎弘业
2023-03-14

运行composer的更新安装要求转储自动加载等时。;我突然收到一张黄色的反对通知,上面写着:

位于./Foo/Bar/utility/Baz.php中的类Foo\Bar\Baz不符合psr-4自动加载标准。跳过

在Composer 2.0之前,人们习惯于获得:

弃用通知:位于./Foo/Bar/Baz.php中的类Foo\Bar\Baz不符合psr-4自动加载标准。它将不再在Composer v2.0中自动加载。在里面phar:///usr/local/bin/composer/src/Composer/Autoload/ClassMapGenerator.php:201

为什么我会收到这个通知或警告?我需要什么来摆脱它并为作曲家2.0做好准备?

共有1个答案

陆文博
2023-03-14

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

重要的是要注意错误信息,它通常非常准确地指向问题的来源。

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

foo/bar/Baz.php不匹配App\Bar\Baz

只需更新您的应用程序或包,使每个路径组件都符合它所拥有的命名空间的大小写:

Foo\Bar\Baz.php

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

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

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

假设你有:

"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 {}

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

 类似资料:
  • 原始关闭原因未解决 我尝试使用作曲家自动加载,但我得到了这个错误 composer.json 我的终端输出

  • 试图在新创建的Laravel项目中要求CrestApps,给我以下msg:位于C:/xampp/htdocs/cn/供应商/crestapps/laravel-code-Generer/src\数据库解析\SqlServerParser.php中的类CrestApps\CodeGenerator\数据库解析\SqlServerP不符合psr-4自动加载标准。跳过。 作曲家版本2.0.7 Crest

  • 问题内容: 有没有办法使CSS选择器与以下内容匹配? 选择器 不起作用,因为它匹配PARAM,而不是对象。我想将{display:none}应用于对象;将其应用于PARAM毫无用处。 (我知道我可以使用jQuery-和VanillaJS- 做到这一点,但我正在尝试在页面上创建CSS规则。) 问题答案: 不,您要查找的内容称为 父选择器 。CSS没有?已经多次提出了这些建议,但我不知道包括它们在内的

  • 问题内容: 我以为我很聪明。但是鉴于最近的发现,我不确定。在页面生命周期中,可能有许多数据库交互。有些背靠背,有些则散布开来。因此,我发明了一个对象,该对象在HttpContext.Items字典中使SQL连接的实例保持活动状态。然后,每个数据库请求都使用此连接,并且当http请求结束时,我会正确处理该连接。我们正在等待几百毫秒的时间,连接将打开,并且通过大量的HTTP高速缓存,可用连接的用尽也不

  • 我和许多其他人一样,似乎很难弄清楚何时以及如何使用自动加载。我想我理解作曲家和PSR-0/PSR-4的概念和这需要的目录结构。但是如果我用自己的MVC框架构建自己的项目 > 由于composer自带了自动加载器,它将加载我希望包含在项目中的所有依赖项,如果我不打算将我的网站变成分布式项目,我甚至需要自己的名称空间吗?为什么我不坚持使用include/requires? 最后,如果我采用名称空间,使

  • 问题内容: 代码是这样的(语法可能看起来很奇怪,但据我所知,它没有任何问题。还是存在?) 被声明为一个函数。因此,当我将参数传递给它时,它也应该返回结果。 那么,为什么我没有得到第二个警告框? 问题答案: 您会看到一个命名函数表达式(NFE)。 匿名函数表达式是您将没有名称的函数分配给变量1的地方: 命名函数表达式是您将命名函数分配给变量的地方(惊奇!): 函数名称仅在函数本身内可用。这使您无需知