类不符合 psr-4 自动加载标准。跳过[重复]

Posted

技术标签:

【中文标题】类不符合 psr-4 自动加载标准。跳过[重复]【英文标题】:class does not comply with psr-4 autoloading standard. Skipping [duplicate] 【发布时间】:2021-03-10 07:27:43 【问题描述】:

我尝试使用 composer autoload 但我收到此错误

composer.json


    "autoload":
        "psr-4":
            "App\\":"app/"
        ,
        "files": ["app/functions/helper.php"]
    ,
    "require": 
        "vlucas/phpdotenv": "^2.4",
        "altorouter/altorouter": "^1.2",
        "philo/laravel-blade": "^3.1"
    ,
    "config":
        "optimize-autoloader":true
    

我的终端输出

Generating optimized autoload files
Class App\Controllers\BaseController located in D:/php/Xamp/htdocs/MVC_PHP/app\controllers\BaseController.php does not comply with psr-4 autoloading standard. Skipping.
Class App\Controllers\IndexControllers located in D:/php/Xamp/htdocs/MVC_PHP/app\controllers\IndexControllers.php does not comply with psr-4 autoloading standard. Skipping.
Class App\RoutingDispatcher located in D:/php/Xamp/htdocs/MVC_PHP/app\routing\RoutingDispatcher.php does not comply with psr-4 autoloading standard. Skipping.
Generated optimized autoload files containing 508 classes

【问题讨论】:

【参考方案1】:

PSR-4 标准要求您的文件和目录区分大小写,并且相应的类和命名空间使用 PascalCase。

对于App\Controllers\BaseController 类,文件应位于:

app/Controllers/BaseController.php

注意大写的C

第二个错误: 对于***命名空间之后的任何命名空间,都必须有一个同名的目录。 您有一个 App\RoutingDispatcher 类,应放置为 app/RoutingDispatcher.php,但 app/routing/RoutingDispatcher.php 文件将对应于 App\Routing\RoutingDispatcher 类。 您必须更改该类的命名空间或移动文件。

如果您更改其命名空间,请务必使用前导大写字母重命名 app/routing 目录。

【讨论】:

文件夹为app\时,其他所有内置模块如何调用App\? @FrankChen 标准要求您有一个对应于 根目录***命名空间,这是您在 中配置的内容autoload.psr4:"Some\\TopLevel\\Namespace": "some/root-directory" 中的 composer.json,这两个部分的名称不需要与您在 section 3 of the document 中看到的相同。但是,将所有 PHP 类放在 src 目录中是很常见的(我什至会说 standard)。 如果我在一个文件夹中有多个类,那我如何命名文件并使用这些类? @dhruvinprajapati 我没有看到任何关于您的问题的具体内容,这是基本的“设置”(包含多个类文件的目录),所以请遵循标准。

以上是关于类不符合 psr-4 自动加载标准。跳过[重复]的主要内容,如果未能解决你的问题,请参考以下文章

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

PSR规范

PSR规范

PSR-4 自动加载如何在 composer 中为自定义库工作?

PSR-4 和类图自动加载的区别?

psr-0 与作曲家自动加载不工作,但它与 psr-4 自动加载完美配合