位于./foo/bar/utility/baz.php中的类FooBarBaz不符合PSR-4自动加载标准。正在跳过 [英] Class FooBarBaz located in ./foo/bar/utility/baz.php does not comply with psr-4 autoloading standard. Skipping

查看:43
本文介绍了位于./foo/bar/utility/baz.php中的类FooBarBaz不符合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做好准备,我需要做些什么?

推荐答案

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

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

路径大小写

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

foo/bar/Baz.phpAppBarBaz不匹配。

只需更新您的应用程序或包,使每个路径组件与其包含的命名空间的大小写匹配:

FooBarBaz.php

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

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

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

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

嵌套命名空间和缺少声明

假设您有:

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

Dummy类,内部定义src/Buzz

// src/Buzz/Dummy.php
namespace FizzBuzz

class Dummy {}

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

// src/Buzz/Dummy.php
namespace FizzBuzzBuzz

class Dummy {}

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

这篇关于位于./foo/bar/utility/baz.php中的类FooBarBaz不符合PSR-4自动加载标准。正在跳过的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆