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

时间:2021-06-12 09:08:12

标签: php laravel namespaces autoload psr-4

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

我在运行 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
{
......

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的模型中的命名空间错误,您缺少 Model 的子命名空间并且只有供应商命名空间,在 Laravel 框架中设置为 App,指向 { {1}} 文件夹作为其基础。

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

Admin

这是因为 PSR-4 不使用文件路径,子命名空间是到达目标类的目录,并且这些目录必须与子命名空间的情况相匹配。类名也是如此,例如,文件必须与类名相匹配。

IF 你的基目录是 namespace App\Models; class Admin {} ,链接到供应商命名空间 Mitra/src 根文件夹中的一个类将只有命名空间 /src如果您在根目录中有一个文件夹; Mitra THEN 命名空间将是 /src/Models

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