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

psr-4 autoloading issue in Laravel

可能这个问题之前已经回答过好几次了。我正在尝试通过 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
{
......

非常感谢任何帮助。

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

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

namespace App\Models;

class Admin {}

这是因为 PSR-4 不依赖于文件路径,子命名空间是到达目的地 class 的目录,并且这些目录必须与子命名空间的大小写相匹配。 class 名称也是如此,文件必须与 class 的文件匹配,例如。

IF 您的基本目录是 /src,链接到供应商命名空间 Mitra,一个 class /src 的根文件夹将只有命名空间 MitraIF 您在根目录下有一个文件夹; /src/Models 然后 命名空间将是 Mitra\Models.

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