Laravel 中的 psr-4 自动加载问题

psr-4 autoloading issue in Laravel

提问人:Prithviraj Mitra 提问时间:6/12/2021 更新时间:6/12/2021 访问量:2178

问:

可能这之前已经回答过好几次了。我正在尝试通过 Laravel 中的作曲家运行自动加载器。

我在运行时收到此错误composer dump-autoload

Class App\Admin located in C:/xampp/htdocs/test/app\Models\Admin.php does not comply with psr-4 autoloading standard. Skipping.

我已经检查了文件系统中的大写字母,对我来说看起来还不错。

Composer 版本是 2.0.14,这是最新的。

Composer.json --

"autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },

文件夹结构为:

<root_project>
 app
  Models
   Admin.php
   .....
 config
 public
 ...

app/Models/Admin.php:

namespace App;

use ....
use ....

class Admin extends Authenticatable implements HasMedia
{
......

请任何帮助,我们将不胜感激。

PHP Laravel 命名空间 自动加载 PSR-4

评论

1赞 John Lobo 6/12/2021
尝试从命名空间 App 更改 namespce;到命名空间 App\Models;
0赞 Prithviraj Mitra 6/12/2021
@JohnLobo 谢谢。我将尝试。在这种情况下,我将不得不更改所有文件。有没有办法通过composer.json来做到这一点。
0赞 Prithviraj Mitra 6/12/2021
我使用phpstorm。我将尝试。

答:

1赞 Kim Hallberg 6/12/2021 #1

模型中的命名空间错误,您缺少 的子命名空间,并且只有 vendor 命名空间,在 Laravel 框架中设置为 ,指向文件夹作为其基础。ModelAppapp

更改模型命名空间以包含子命名空间将解决您的问题。Admin

namespace App\Models;

class Admin {}

这是因为 PSR-4 在文件路径上工作,子命名空间是到达目标类所要经过的目录,并且这些目录必须与子命名空间的大小写匹配。类名也是如此,例如,文件必须与类名匹配。

如果您的基目录是 ,链接到供应商命名空间 Mitra,则根文件夹中的类将只有命名空间。如果您在根目录中有一个文件夹; 那么命名空间将是 ./src/srcMitra/src/ModelsMitra\Models

PSR-4 的规范是一个相当短的规范,并且有很好的文档记录,如果您难以理解,我建议您阅读它。